Luk*_*der 20 java weblogic jms message-queue
从性能角度理解JMS我遇到了一些麻烦.我们在应用程序中有这么简单的代码:
QueueConnection connection = null;
QueueSession session = null;
QueueSender sender = null;
TextMessage msg = null;
try {
// The JNDIHelper uses InitialContext to look up things
QueueConnectionFactory qcf = JNDIHelper.lookupFactory();
Queue destQueue = JNDIHelper.lookupQueue();
// These objects are created for every message, which is quite slow
connection = qcf.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
sender = session.createSender(destQueue);
// This is the actual message
msg = session.createTextMessage(xmlMsg);
sender.setTimeToLive(0);
sender.send(msg);
}
finally {
// Close all objects again
JMSUtilities.safeClose(sender);
JMSUtilities.safeClose(session);
JMSUtilities.safeClose(connection);
}
Run Code Online (Sandbox Code Playgroud)
代码是正确的,但可能上面的一些人工制品可以重复用于几条消息.这些是我们的配置:
QueueConnection,QueueSession,QueueSender因为没有涉及并发)在内存中.Spa*_*ker 16
以下是jms规范的一些相关部分:
2.8节多线程
JMS Object Supports Concurrent Use
Destination YES
ConnectionFactory YES
Connection YES
Session NO
MessageProducer NO
MessageConsumer NO
Run Code Online (Sandbox Code Playgroud)
第4.4.14节"客户端代码的串行执行"
除非客户端明确请求,否则JMS不会导致客户端代码的并发执行.这样做的一种方法是定义会话序列化所有异步消息传递
所以已经提到尽可能多地重用.重用所有线程的ConnectionFactory,Connection和Destinations.对于每个Thread重用消费者和生产者.
如果您正在重用JMS连接,请注意JMS提供程序将在该连接上多路复用不同的会话.因此,即使重用连接是安全的,也可以更快地为您需要的每个会话创建连接.
| 归档时间: |
|
| 查看次数: |
8305 次 |
| 最近记录: |