ActiveMQ の使用方法を学んでいますが、現在、次の問題に直面しています。
2 つのサブスクライバーを持つ ActiveMQ に topic.test という名前のトピックがあるとします。ある時点で、メッセージを待っているサブスクライバーは 1 人だけで、プロデューサーは上記のトピックに関するメッセージを送信します。
接続されたサブスクライバーはメッセージを受け取りますが、他のサブスクライバーは後で接続されたときにそのメッセージを受信するべきではありませんか? 私の場合、それは起こっていません。私のサブスクライバーは、接続中にのみメッセージを受信しています。接続されていない間に送信された他のすべてのメッセージは、受信されていません。私は何が間違っているのでしょうか?
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 に追加する必要がある他の構成はありますか?