JMS会话和提交

时间:2011-05-17 08:57:19

标签: session jms listener

我是新的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);

}

现在我担心的是,如果监听器同时收到两条消息,会话是否有可能同时提交这两条消息?

1 个答案:

答案 0 :(得分:1)

会话中的所有内容都是单线程的。不用担心多线程。请参阅How to temporarily disable a message listener(不同的问题,类似的问题)。

你确实为每个听众创建了一个单独的会话,对吗?这是一个要求。 “会话中的所有内容都是单线程的”。