Разница между MQQueueConnectionFactory и MQXAQueueConnectionFactory - PullRequest
1 голос
/ 27 марта 2020

Может ли кто-нибудь объяснить мне, следует ли мне использовать MQXAQueueConnectionFactory, если я хочу просто читать сообщения @JmsListener в Spring Boot?

Я читаю сообщения с MQXAQueueConnectionFactory и с MQQueueConnectionFactory, и я не вижу разницы. Если я делаю исключение в методе прослушивателя, я вижу, что сообщение доставляется снова и снова.

В это время параметр setSessionTransacted имеет значение true, а параметр setTransactionManager имеет значение null для DefaultJmsListenerContainerFactory:

public void configure(DefaultJmsListenerContainerFactory factory,
        ConnectionFactory connectionFactory) {
    Assert.notNull(factory, "Factory must not be null");
    Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
    factory.setConnectionFactory(connectionFactory);
    factory.setPubSubDomain(this.jmsProperties.isPubSubDomain());
    if (this.transactionManager != null) {
        factory.setTransactionManager(this.transactionManager); // null
    }
    else {
        factory.setSessionTransacted(true);
    }
    ...

1 Ответ

2 голосов
/ 27 марта 2020

Как следует из названия, MQXAQueueConnectionFactory используется при работе с транзакциями XA. Говоря технически, MQXAQueueConnectionFactory реализует javax.jms.XAConnectionFactory, что в конечном итоге обеспечивает доступ к другому XA-связанному соединению , контексту , сеансу и ресурс интерфейсы. Обычно они используются базовой платформой (например, Java EE или Spring) вместе с менеджером транзакций для координации транзакции XA между несколькими менеджерами ресурсов (например, провайдер JMS и база данных JDB C).

Поскольку вы не работаете с транзакциями XA, вам следует просто использовать MQQueueConnectionFactory.

Для ясности транзакция XA отличается от сеанса транзакции JMS (который вы настроили).

...