Установить свойство brokerDurSubQueue в Spring Boot + JMS + IBM MQ Durable Topi c listener - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь прослушать сообщение через приложение загрузки Spring, используя подписку IBM MQ topi c.

Доступная информация (предоставлена ​​администратором MQ):

Topic name
Host
Port
QueueManager
BrokerDurableSubscriptionQueue

Я пытаюсь установить свойство BrokerDurableSubscriptionQueue в MQConnectionFactory.

Я могу найти mqConnectionFactory.setBrokerSubQueue(queueName), который, я думаю, можно использовать для подписки на недлительный срок.

Но я не могу найти аналогичное свойство для подписки Durable.

Однако я вижу MQTopi c класс имеет свойство setBrokerDurSubQueue , но я не уверен, как могу ли я использовать объект MQTopi c в моем случае.

Я использую код ниже:

MQConnectionFactory:

@Bean

public MQTopicConnectionFactory topicConnectionFactory(){

  MQTopicConnectionFactory mqTopicConnectionFactory= new MQConnectionFactory();

  mqTopicConnectionFactory.setHostName(); //mq host name

  mqTopicConnectionFactory.setPort(); // mq port

  mqTopicConnectionFactory.setQueueManager(); //mq queue manager

  mqTopicConnectionFactory.setChannel(); //mq channel name

  mqTopicConnectionFactory.setTransportType(1);

  mqTopicConnectionFactory.setSSLCipherSuite(); //tls cipher suite name

  return mqTopicConnectionFactory;

}


@Bean

public JmsListenerContainerFactory<?> topicListenerFactory(MQTopicConnectionFactory  mqtopicConnectionFactory,
                                                DefaultJmsListenerContainerFactoryConfigurer configurer)
 {

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();   

configurer.configure(factory, mqtopicConnectionFactory);

factory.setPubSubDomain(true);

factory.setSubscriptionDurable(true);

return factory;

}

Слушатель:

@JmsListener(
destination = "someTopic",
subscription = "someTopic",
containerFactory = "topicListenerFactory" 
)

public void receiveMessage(String msg) {

repository.save(msg);

}

1 Ответ

0 голосов
/ 06 мая 2020

Фон:

Когда вы предоставляете определенную очередь c для IBM MQ, чтобы использовать его при подписке на topi c, это называется неуправляемой подпиской, потому что MQ не управление базовой очередью, поскольку вы ее предоставили.

Если очередь не предоставляется, она называется управляемой подпиской, в этом случае MQ создает очередь для хранения опубликованных сообщений.

  • Если это недолговечная подписка, создаваемая очередь представляет собой временную динамическую c очередь с именем, например:
    SYSTEM.MANAGED.NDURABLE.<8 hex characters>

  • Если это - это долговременная подписка, созданная очередь представляет собой постоянную динамическую c очередь с таким именем, как:
    SYSTEM.MANAGED.DURABLE.<8 hex characters>


Вы обнаружили, что IBM MQ классы для JMS API поддерживают только управляемые подписки.


Предложения:

Я могу предложить два варианта, если вы хотите использовать классы IBM MQ для JMS API для получения сообщения опубликованы в топи c по указанному c очередь:

  1. Попросите администратора MQ настроить административную подписку для администратора очередей. Вы можете сделать это несколькими способами. В приведенном ниже примере будет использоваться команда MQS C.

    DEFINE SUB('XYZ') TOPICSTR('SOME/TOPIC') DEST(SOME.QUEUE)

  2. Создание служебного приложения с использованием классов IBM MQ для Java, которое может открывать queue и создать долговременную подписку с предоставленной очередью, единственной целью этого приложения будет подписаться и отменить подписку на предоставленную очередь, оно не будет использоваться для использования каких-либо опубликованных сообщений.

Для обоих вышеуказанных вариантов классы IBM MQ для приложения JMS API должны открывать очередь для использования опубликованного сообщения, во всех случаях, когда он не будет знать или не должен знать, что сообщения были опубликованы в топи c. Сообщение по-прежнему будет содержать заголовки JMS, показывающие строку topi c, в которой было опубликовано сообщение, поэтому вы можете запросить это при необходимости. Вы также можете подписаться на несколько тем в одну очередь, если хотите.

...