我正在学习如何使用 ActiveMQ,现在我们面临以下问题。
假设我在 ActiveMQ 上有一个名为 topic.test 的主题,它有两个订阅者。在给定的时刻,我只有一个订阅者在等待消息,并且生产者为我上面提到的主题发送消息。
好的,已连接的订阅者收到消息,但其他订阅者不应该稍后在连接时收到该消息吗?好吧,就我而言,它没有发生:我的订阅者只在连接时接收消息。他们没有收到在未连接时发送的所有其他消息。我可能做错了什么?
这是我为测试 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 添加任何其他配置,以便我的消费者可以获得较旧的消息?