恒久サブスクリプションを習得してください。私はhereの例を微調整しました。私は2つのプログラムを書いた。私はトピックを作成し、PERSISTENCEモードでメッセージを送信します。他のプログラムでは、同じ話題の永続的な購読者を作成し、受信しようとします。JMS永続サブスクリプション。購読者はメッセージを受信しません。
私は最初のプログラムを実行します。それは正常に終了します。その後、私は第2の(消費者)プログラムを実行します。しかしそこには何のメッセージも出ません。 receive()メッセージはブロックされたままです。
私には何が欠けていますか?プロデューサープログラムの
主要部分は、消費者プログラムの
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");
try{
con = connectionFactory.createConnection();
con.setClientID("DurabilityTest");
con.start();
session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic myFirstTopic = session.createTopic("myFirstTopic");
MessageProducer producer = session.createProducer(myFirstTopic);
// Registering consumers. But not calling receive on them
MessageConsumer consumer1 = session.createDurableSubscriber(myFirstDurableTopic, "consumer1", "", false);
MessageConsumer consumer2 = session.createDurableSubscriber(myFirstDurableTopic,"consumer2", "", false);
TextMessage txtMsg = session.createTextMessage("Namaskar mitranno2!!");
producer.send(myFirstTopic, txtMsg, DeliveryMode.PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE+10000);
}catch(JMSException e){
e.printStackTrace();
}
主要部分は耐久性のあるトピックサブスクリプションのみが作成された後にメッセージを保持するために開始し
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");
try{
con = connectionFactory.createConnection();
con.setClientID("DurabilityTest");
con.start();
session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic myFirstTopic = session.createTopic("myFirstTopic");
MessageConsumer consumer1 = session.createDurableSubscriber(myFirstTopic, "consumer1", "", false);
processMessage(consumer1,consumer1.receive());
MessageConsumer consumer2 = session.createDurableSubscriber(myFirstTopic,"consumer2", "", false);
processMessage(consumer2,consumer2.receive());
}catch(JMSException e){
e.printStackTrace();
}
あなたが言ったシーケンスを試しました。うまく行かなかった。 –
質問を更新してコードを表示してください。それ以外の場合は発生しませんでした。 –
あなたは何をしているのかはっきりしていませんが、明らかに間違っています。 –