Я изучаю, как использовать ActiveMQ, и теперь мы столкнулись со следующей проблемой.
Предположим, у меня есть тема с именем topic.test в ActiveMQ, у которой есть два подписчика.
В данный момент у меня есть только один подписчик, ожидающий сообщений, и продюсер отправляет сообщение по теме, о которой я говорил выше.
Хорошо, подключенный подписчик получает сообщение, но не должен ли другой подписчик получить это сообщение позже, когда он подключен? Ну, в моем случае этого не происходит: мои подписчики получают сообщения только при подключении. Все остальные сообщения, которые были отправлены, пока они не были подключены, не принимаются ими. Что я могу делать не так?
Вот часть исходного кода, который я написал для тестирования ActiveMQ. Может быть, вы могли бы найти, что с ним не так.
Мой потребительский код:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.setClientID("leitorTeste");
conexao.start();
Session sessao = conexao.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic fonte = sessao.createTopic("topic.test");
MessageConsumer consumer = sessao.createConsumer(fonte);
javax.jms.Message presente = null;
while ((presente = consumer.receive()) != null) {
System.out.println(((TextMessage) presente).getText());
}
consumer.setMessageListener(new LeitorMensagens());
conexao.close();
А вот мой код производителя:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
Session sessao = conexao.createSession(true, Session.AUTO_ACKNOWLEDGE);
connection.start();
Destination destino = sessao.createTopic("topic.test");
MessageProducer produtorMensagem = sessao.createProducer(destino);
produtorMensagem.setDeliveryMode(DeliveryMode.PERSISTENT);
TextMessage message = sessao.createTextMessage("Hi!");
produtorMensagem.send(message);
sessao.commit();
connection.close();
Есть ли какая-либо другая конфигурация, которую я должен добавить в ActiveMQ, чтобы мои потребители могли получать старые сообщения?