【问题标题】:JMS Session and commitJMS 会话和提交
【发布时间】:2011-05-17 08:57:18
【问题描述】:

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

    }

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

【问题讨论】:

    标签: session jms listener


    【解决方案1】:

    从 Session 开始的一切都是单线程的。不用担心多线程。见How to temporarily disable a message listener(不同的问题,类似的问题)。

    您确实为每个侦听器创建了一个单独的会话,对吗?这是一个要求。 “从 Session 开始的一切都是单线程的”的一部分。

    【讨论】:

    • 感谢您的回复。是的,每个听众一个会话。
    猜你喜欢
    • 2018-07-07
    • 2016-10-28
    • 2017-07-17
    • 1970-01-01
    • 2011-07-12
    • 2017-11-06
    • 1970-01-01
    • 2015-01-20
    • 2021-05-23
    相关资源
    最近更新 更多