我是新的JMS竞技场,我创建了多个消息监听器,但每个线程只有一个监听器。我有以下消息监听器,这个消息列表器在构造时传递一个会话对象。然后,当收到消息时,此消息侦听器处理消息,然后提交会话,如代码中所示。关闭会话/连接在关闭钩子中完成。
public class MyMessageListener implements MessageListener, ExceptionListener {
private Session _session = null;
public MyMessageListener(Session s) {
_session = s;
}
@Override
public void onMessage(Message arg0) {
try {
// Retrieve the data
JMSBytesMessage bytesMessage = (JMSBytesMessage) arg0;
byte[] payload = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(payload);
String payloadString = new String(payload);
ProcessMessage(payloadString);
_session.commit();
MessageCounter.Increment();
} catch (Exception e) {
e.printStackTrace();
}
}
public abstract void ProcessMessage(String theMessage);
}
现在我担心的是,如果监听器同时收到两条消息,会话是否有可能同时提交这两条消息?
答案 0 :(得分:1)
会话中的所有内容都是单线程的。不用担心多线程。请参阅How to temporarily disable a message listener(不同的问题,类似的问题)。
你确实为每个听众创建了一个单独的会话,对吗?这是一个要求。 “会话中的所有内容都是单线程的”。