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

问题描述 投票:0回答:1

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

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);
java jms solace
1个回答
0
投票

您需要提交XA事务以消耗消息。在JMS中,函数调用为XAResource.commit(xid, true)

而且,是否有理由使用CountDownLatch?如果您想同步使用消息,则可以选择不设置消息侦听器并调用MessageConsumer.receive()

Solace确实提供了一个基本示例,显示了如何利用XA事务。请参阅API的示例目录中的XATransactions.java

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

© www.soinside.com 2019 - 2024. All rights reserved.