Я исследую ActiveMQ, чтобы посмотреть, будет ли он работать для проекта.Текущий вариант использования, который я должен продемонстрировать, заключается в том, что подписавшиеся позднее подписчики получат темы, опубликованные до создания подписки.Казалось, что пользователи ActiveMQ Retroactive могли бы удовлетворить эту потребность, но я не могу заставить работать код.
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("[url]");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic("testAddress?consumer.retroactive=true");
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("Hello, World!");
producer.send(message);
Thread.sleep(5000);
session.createConsumer(destination).setMessageListener(message2 -> processMessage(message2));
session.close();
connection.close();
connectionFactory.close();
Все, что я пытаюсь продемонстрировать здесь, это то, что тема может быть опубликована, а затем некоторыепроизвольное количество времени спустя (например, 5 секунд) потребитель может подписаться на тему и получить предыдущее сообщение.
Насколько я могу судить, проблема заключается в том, что при создании темы создается адрес, ноне создает никаких связанных очередей.Если я отправляю тему по адресу до того, как очередь будет создана (либо в коде, либо вручную через веб-интерфейс для брокера), сообщение, похоже, будет проигнорировано, и сразу будет увеличен "счетчик не маршрутизированных сообщений".
Документация ActiveMQ (https://activemq.apache.org/retroactive-consumer) не предоставляет более подробной информации о том, как настроить обратного пользователя, чем добавление "? Consumer.retroactive = true" при создании темы, поэтому мне интересно, есть ли некоторыедругие аспекты конфигурации, которые мне не хватает.