我正在学习如何使用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中,以便我的用户能够获取旧消息?