私は、Wildfly 10でJMS 2.0を使用して一時的なJMSキューを作成しようとしています。JEEサーバ(JMS)のJMS一時キューにリスナーを作成する方法はありますか。
@ JMSConnectionFactoryを使用してConnectionFactoryを注入しています。これは正常に動作します。また、一時的なキューを作成
@Inject @JMSConnectionFactory("java:/jms/RemoteConnectionFactory") JMSContext jmsContext
が正常に動作します:
Destination jmsQueue = jmsContext.createTemporaryQueue();
がパブリッシャの作成と作品大丈夫、同様のメッセージを公開:
JMSProducer producer = jmsContext.createProducer();
TextMessage msg = jmsContext.createTextMessage(Long.toString(new Date().getTime()));
producer.send(jmsQueue, msg);
をしかし、どのように私はのためのリスナーを作成しますキュー? tempキューがあらかじめ定義されていないため、私はMDBを使用できません。私は消費者を作成しようと、それにメッセージリスナを割り当てた場合、私は、次のエラーメッセージが表示されます:
JMSConsumer consumer = jmsContext.createConsumer(jmsQueue);
consumer.setMessageListener(new MessageListener() {
...
...
});
エラートレース:
Caused by: javax.jms.IllegalStateException: This method is not applicable inside the application server. See the J2EE spec, e.g. J2EE1.4 Section 6.6
at org.apache.activemq.artemis.ra.ActiveMQRASession.checkStrict(ActiveMQRASession.java:1452)
at org.apache.activemq.artemis.ra.ActiveMQRAMessageConsumer.setMessageListener(ActiveMQRAMessageConsumer.java:123)
at org.apache.activemq.artemis.jms.client.ActiveMQJMSConsumer.setMessageListener(ActiveMQJMSConsumer.java:59)
だから、私は明示的にメッセージを設定することはできませんように見えますリスナーはJEEで制御された接続ファクトリーを持ちます。しかし、それは一時的なキューであるため、MDBを作成することはできません。宛先はコンパイル時には分かっていないからです。だから、どのように私は一時的なキューを聞くのですか?
ありがとうございました - 私もそれを試みましたが、同じ例外がスローされました。クライアントがJMS2またはJMS1ファサードを使用しているかどうかにかかわらず、同じActiveMARASessionをまだ使用しているため、特に驚くことはありません。私はこれに論理的な解決策がないと想像することはできません。 –
なぜ一時的なキューが必要なのですか?コンテナがデプロイメントの存続期間中にmdbインスタンスを提供することを期待している場合は、そのキューも存在する必要があります。 –
@willtクラスタの各ノードに固有のパブリッシュ/サブスクライブキューが必要です。キューはランタイムの存続期間中存続しなければなりませんでした。再起動を継続する必要はありません。さらに、これらのキューを手動で管理する必要もありません。したがって、一時的な待ち行列の考え方...しかし、それを聞く方法がない場合、一時待ち行列の目的はどれくらいですか? @ EricB。 –