Я новичок в JMS pub / sub, использую Spring boot и Apache Active MQ. Не могли бы вы помочь разобраться в приведенных ниже сценариях?
Сценарий 1:
Шаг 1. У меня есть издатель, который публикует сообщение (Say MessageA) в теме (Say TopicA), и в то время, когда оно было опубликовано, не было подписчиков / потребителей, поэтому сообщение попадает в Сообщения, поставленные в очередь в Apache Active MQ.
Шаг 2. У меня теперь есть новый подписчик на TopicA. Как потребовать более ранний MessageA, который уже был сообщениями, помещенными в очередь в Apache Active MQ?
Мой вывод: раньше никто не подписывался и, следовательно, вы можете не получить сообщениеA. (Пожалуйста, поправьте, если я ошибаюсь)
Сценарий 2:
Шаг 1. У меня есть издатель, который публикует сообщение (Say MessageA) в теме (Say TopicA), и подписчик успешно получил MessageA.
Шаг 2. Теперь система подписчиков не работает из-за некоторых внутренних / сетевых проблем, и в TopicA было опубликовано сообщение MessageA. Когда система подписчиков запущена и работает, как вернуть более раннее сообщение MessageA, которое было опубликовано в TopicA, когда система подписчиков не работала?
Это необходимо для того, чтобы даже при отказе подписчиков он по-прежнему получал сообщения, поставленные в очередь.
Спасибо за редактирование! Это изменение будет видно только вам, пока оно не будет проверено коллегами.
Я новичок в JMS pub / sub, использую Spring boot и Apache Active MQ. Не могли бы вы помочь разобраться в приведенных ниже сценариях?
Сценарий 1:
Шаг 1. У меня есть издатель, который публикует сообщение (Say MessageA) в теме (Say TopicA), и в то время, когда оно было опубликовано, не было подписчиков / потребителей, поэтому сообщение попадает в Сообщения, поставленные в очередь в Apache Active MQ.
Шаг 2. У меня появился новый подписчик на TopicA. Как потребовать более ранний MessageA, который уже был сообщениями, помещенными в очередь в Apache Active MQ?
Мой вывод: раньше никто не подписывался и, следовательно, вы можете не получить сообщениеA. (Пожалуйста, поправьте, если я ошибаюсь)
Сценарий 2:
Шаг 1. У меня есть издатель, который публикует сообщение (Say MessageA) в теме (Say TopicA), и подписчик успешно получил MessageA.
Шаг 2. Теперь система подписчиков не работает из-за некоторых внутренних / сетевых проблем, и в TopicA было опубликовано сообщение MessageA. Когда система подписчиков запущена и работает, как вернуть более раннее сообщение MessageA, которое было опубликовано в TopicA, когда система подписчиков не работала?
Это необходимо для того, чтобы даже при отказе подписчиков он по-прежнему получал сообщения, поставленные в очередь.
Мой код производителя:
@Bean
public JmsTemplate jmsTemplate(){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setPubSubDomain(true);
template.setDeliveryMode(DeliveryMode.PERSISTENT);
return template;
}
Мой потребительский код:
@Bean
public JmsListenerContainerFactory<?> jsaFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(true);
factory.setSubscriptionDurable(true);
configurer.configure(factory, connectionFactory);
return factory;
}