使用XASession时未将消息从JMS队列中删除

时间:2019-10-18 06:40:24

标签: java jms solace

我正在尝试连接到慰问队列并仅从其中读取消息。但是,我能够读取消息,但是消息并未从队列中删除。 下面是我尝试过的代码:

public void clearMessages() throws Exception {

        // Programmatically create the connection factory using default settings
        // Create connection to the Solace router

        SolXAConnectionFactoryImpl connectionFactory = returnConnFactory();


        XAConnection connection = connectionFactory.createXAConnection();

        XASession session = connection.createXASession();

        Queue queue = session.createQueue(QUEUE_NAME);
        connection.start();
        MessageConsumer messageConsumer = session.createConsumer(queue);
        //session.b

        messageConsumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                if(message instanceof SolTextMessage)  {
                    SolTextMessage solTextMessage =(SolTextMessage)message;
                    try {
                        System.out.println("Message cleared is : "+solTextMessage.getText());
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                else {
                    System.out.println("Message Content: %s"+ SolJmsUtility.dumpMessage(message));
                }
                    latch.countDown(); 
            }
        });
        latch.await(120,TimeUnit.SECONDS);
        connection.stop();

        messageConsumer.close();
        session.close();
        connection.close();
    }

这里的闩锁是CountDownLatch的对象,其初始化为:

CountDownLatch latch = new CountDownLatch(2);

1 个答案:

答案 0 :(得分:1)

您需要提交XA事务以消耗消息。 在JMS中,函数调用为0 + 1

此外,是否有理由使用CountDownLatch? 如果您想同步使用消息,则可以选择不设置消息侦听器并调用XAResource.commit(xid, true)

Solace确实提供了一个基本示例,展示了如何利用XA事务。 请参阅API的示例目录中的MessageConsumer.receive()

请注意,示例代码通过调用相关的XAResource方法(例如XAResource.commit())来手动管理XA事务。 XA事务通常在包含事务管理器的Java EE应用程序服务器中使用,以管理XA事务的生命周期。