Сообщения, не удаляемые из очереди JMS при использовании XASession - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь подключиться к очередям утешения и просто читать сообщения из них. Однако я могу читать сообщения, но сообщения не удаляются из очереди. Ниже приведен код, который я пробовал:

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();
    }

Здесь latch - это объект CountDownLatch, который инициализируется как:

CountDownLatch latch = new CountDownLatch(2);

1 Ответ

1 голос
/ 18 октября 2019

Вам необходимо зафиксировать транзакцию XA, чтобы сообщения могли быть использованы. В JMS вызов функции: XAResource.commit(xid, true)

Кроме того, есть ли причина использовать CountDownLatch? Если вы хотите получать сообщения синхронно, вы можете не устанавливать прослушиватель сообщений и вызывать MessageConsumer.receive()

. Утешение дает базовый пример, показывающий, как использовать транзакции XA. См. XATransactions.java в каталоге примеров API.

Обратите внимание, что образец кода вручную управляет транзакцией XA, вызывая соответствующие методы XAResource, такие как XAResource.commit (). Транзакции XA обычно используются на серверах приложений Java EE, которые содержат менеджер транзакций, для управления жизненным циклом транзакций XA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...