2017-08-30 9 views
2

メッセージブローカーとしてRabbitMQを使用するようにJB EAP7を設定するのが難しいです。 私はrabbitmqモジュールを作成し、スタンドアロンのha.xmlにグローバルモジュールとして定義しました。WildBirdをRabbitMQに接続するように設定するには?

モジュール/システム/層/ベース/ COM/RabbitMQの/メイン/ module.xml:

<module xmlns="urn:jboss:module:1.1" name="com.rabbitmq"> 
    <resources> 
     <resource-root path="rabbitmq-jms-1.7.0.jar"/> 
     <resource-root path="amqp-client-4.2.0.jar" /> 
    </resources> 
    <dependencies> 
     <module name="javax.api" /> 
     <module name="javax.transaction.api"/> 
     <module name="org.slf4j"/> 
    </dependencies> 
</module> 

JB7が問題なく起動。しかし、私は、MDBはActiveMQの接続(私は推測Wildflyのデフォルトプロバイダ)にバインドしようとしていることを示す、私のserver.logに以下を参照してください。

2017-08-29 17:24:09,193 INFO [org.jboss.as.ejb3]WFLYEJB0042: Started message driven bean 'Subscriber' with 'activemq-ra' resource adapter 
2017-08-29 17:24:09,368 INFO [javax.enterprise.resource.webcontainer.jsf.config]Initializing Mojarra 2.2.12-jbossorg-2 for context '/webapp-0.0.1-SNAPSHOT' 
2017-08-29 17:24:09,462 INFO [org.apache.activemq.artemis.ra]AMQ151000: awaiting topic/queue creation java:/global/mq/kodo 
2017-08-29 17:24:10,103 INFO [org.wildfly.extension.undertow]WFLYUT0021: Registered web context: /webapp-0.0.1-SNAPSHOT 
2017-08-29 17:24:10,285 INFO [org.jboss.as.server]WFLYSRV0010: Deployed "webapp-0.0.1-SNAPSHOT.war" (runtime-name : "webapp-0.0.1-SNAPSHOT.war") 
2017-08-29 17:24:10,286 INFO [org.jboss.as.server]WFLYSRV0010: Deployed "kodo-jdo.rar" (runtime-name : "kodo-jdo.rar") 
2017-08-29 17:24:11,465 INFO [org.apache.activemq.artemis.ra]AMQ151001: Attempting to reconnect org.apache.activemq.artemis.ra.inflow.ActiveMQActivationSpec([email protected]71 destination=java:/global/mq/kodo destinationType=javax.jms.Queue ack=Auto-acknowledge durable=false clientID=null user=null maxSession=15) 

私は私の中で特定するかどうかはわかりません私は、MDBに私のRabbitMQで定義されたConnectionFactoryを使用させたいと考えています。私のMDBは、次のように定義されています:

しかし、どこで/どのようにConnectionFactoryを指定するのかわかりません。私は@JMSConnectionFactory(String JNDI)アノテーションをクラスに追加しようとしましたが、私はまだ同じ結果を得ています。

RabbitMQモジュール定義に何か不足していますか?私のMDBには注釈が付けられていませんか? RabbitMQ ConnectionFactoryを使用してMessage Brokerに接続するようにMDBを設定するには、何が必要ですか?

答えて

2

MDB用に別のブローカーを使用する場合は、MDBがWebプロファイルではなくJava EE Fullプロファイルの一部であるため、完全なプロファイル用にのみ存在するWildfly構成ファイルの構成を変更する必要があります。 この構成は、スタンドアロン・full.xmlファイルで入手でき、たとえば次のとおりです。

<mdb> 
    <resource-adapter-ref resource-adapter-name="${ejb.resource-adapter-name:activemq-ra.rar}"/> 
    <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> 
</mdb> 

残念ながら、RabbitMQ JMS Client経由でのRabbitMQに接続するにはまだMDBを使用することはできないようです。 これは、オプションのJMSクライアント仕様機能が実装されていないためです。 RabbitMQ Jms client compliance page

RabbitMQに接続するメッセージリスナーを使用する場合(キューをポーリングしたくない場合)、setMessageListenerメソッドとCDIを使用して手動で宣言できます。詳細については、this answerを参照してください。

JMSの場合:しかし、私は、このメソッドが例外をスローjavadocのあたりのように、この最後の1は、実際に(Wildflyは、Java EEのWebプロファイルで起動してテストする)Wildflyで作業したりしませんかどうかわからないんだけどプロバイダは、 内部エラーが発生したか、または このメソッドがJava EE WebアプリケーションまたはEJBアプリケーションで呼び出された(この場合は例外がスローされることは保証されていません)ため、MessageConsumerのMessageListenerを設定できません

RabbitMQ JMS Client文書に記載されているWildfly構成を使用するには、 o Wildflyの設定を有効にするには、this Pull requestという1.7.0バージョンを使用します。

私は

+0

感謝をwildflyするRabbitMQのJMSクライアントの統合をテストしたときに私がしたコードの一部を共有しようとします。私はMDBのアイデアをあきらめ、メッセージリスナーとCDI(スタンドアロンのha.xmlからConnectionFactoryとQueueの定義を取得する)だけを使用しています。 –

+0

ここでは、自動回復、またはJMSクライアントを使用したタイムアウトの処理方法に問題があります。https://stackoverflow.com/q/46007414/827480を参照してください。JMSクライアントによる例外処理を処理する方法を理解しましたか? –

+0

これは技術的にJMSクライアントに実装できますか、またはJMSのMDB要件が本質的に不可能なAMQPですか?そして、私たちが話している特定のJMS機能は何ですか? –

関連する問題