2017-05-25 7 views
1

私はJavaEEにはかなり新しく、jmsとmdbを使ってメッセージングシステムを構築しようとしています。何も特別なのでJMSEEとMDBを使用したJavaEE-メッセージングシステム

直接ではないクライアントは、単にサーバーを介して通信しなければならないと - MDB によって実現されているメッセージを処理するためのサーバ - - を伝えなければならないさまざまなクライアント :私は次のことをやりたいん。私はオラクルのドキュメントやチュートリアルで多くを読んだことがありますが、(まだ動作していますが)いくつかのことについてはまだ混乱しています。

1.Message駆動型Bean:@ActivationConfigProperty注釈でBeanを構成することが可能である@MessageDriven注釈で 、例えば:

@MessageDriven(mappedName = "myBean", activationConfig = { 
     @ActivationConfigProperty(propertyName = "messageSelector", 
       propertyValue = "requestType = 'reqA' OR requestType = 'reqB'"), 
     @ActivationConfigProperty(propertyName = "destinationType", 
       propertyValue = "javax.jms.Queue")}) 

しかし、どのように私はこのBeanのキュー「を作成する」のか?私はここに何かが恋しいと思っています。

2.私はマネージドBeanを使用しています。クライアントは送受信できるため、キューやトピックが必要です。私は

@Resource(name = "clientQueue") 
private Queue clientQueue; 

をクライアントにキューを作成し、私は

@Resource(name = "clientQueue") 
private Queue clientQueue; 

でクライアントからキューを取得mdbでは

@Resource(mappedName = "serverBean") 
private Queue serverQueue; 

でMDBからキューを取得していることです正しいか、より良い解決策がありますか?

これは非常に基本的ですが、私は混乱しています。チュートリアルの書式apache tomcatは私が得ないoracleのチュートリアルといくつかの違いがあります。

私はちょっと混乱してしまったので、どんな説明も非常にいいと思います!

答えて

0

あなたが参照しているキューは、アプリケーションの外部に存在し、アクセスするためのメカニズムを提供するのはサーバーの責任です。最も単純なシナリオは、キューがサーバーによって定義されているため、そこで実行されているすべてのアプリケーションでキューを簡単に使用できることです。実際の定義はプロバイダ固有です(つまり、jboss、payaraなどとは異なります)。

Wildfly/JBossでの操作方法を見てみましょう。私たちは、接続ファクトリ、キュー、トピックなどを定義でき、サーバは、ActiveMQのメッセージングサブシステムを使用しています

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"> 
      <server name="default"> 
       <security-setting name="#"> 
        <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/> 
       </security-setting> 
       <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/> 
       <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/> 
       <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput"> 
        <param name="batch-delay" value="50"/> 
       </http-connector> 
       <in-vm-connector name="in-vm" server-id="0"/> 
       <http-acceptor name="http-acceptor" http-listener="default"/> 
       <http-acceptor name="http-acceptor-throughput" http-listener="default"> 
        <param name="batch-delay" value="50"/> 
        <param name="direct-deliver" value="false"/> 
       </http-acceptor> 
       <in-vm-acceptor name="in-vm" server-id="0"/> 
       <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/> 
       <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/> 
       <connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory"/> 
       <connection-factory name="RemoteConnectionFactory" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/> 
       <pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/> 
      </server> 
     </subsystem> 

これはWildfly 10のデフォルト設定である(あなたが完全なプロファイルを使用するか、または手動でプロファイルにmessaging-activemqサブシステムを追加する必要があります)。既定の設定では、ローカル接続ファクトリ(InVmConnectionFactory)とデッドレターキューと有効期限キューの2つのキューが既に用意されています。新しいキューを追加できます。
すべてのキューには、名前と少なくとも1つのjndi参照エントリが必要です。

<jms-queue name="ClientQueue" entries="java:/jms/queue/clientQueue"/> 

これは、あなた@Resource(name = "clientQueue")経由で検索を満たす必要がありますclientQueueキューを定義します。

MDBには、メッセージを受信するキューから指定する追加の設定も必要であることに注意してください。

@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/queue/clientQueue") 

サーバーベンダーが提供する簡単な例から始めてください。良い例はherehereです。
ハッピーハッキング。

関連する問題