2

非同期 JMS アプリケーションを実装するにはどうすればよいですか? サーバープログラムを変更する必要がありますか、それともクライアントコードを変更する必要がありますか? 同期 JMS メッセージングを非同期に変更する方法を教えてください。

4

2 に答える 2

2

とてもシンプルです。メッセージを非同期で受信するには、メッセージリスナーをコンシューマーに割り当てる必要があります。

consumer.setMessageListener(new MessageListener).

グーグルはあなたに多くのサンプルを取得します。

于 2012-07-23T08:31:03.510 に答える
1

Java EE のメッセージ駆動型 Bean は非同期です。自然に。単純な MDB は次のようになります。

@MessageDriven(mappedName = "jms/MyQueue") // JNDI name for a specific Destination (queue or topic)
public class MyMDB implements MessageListener{
  public void onMessage(Message msg){
    // handle it async.

  }
}

それ以外の場合、プレーンな Java/JMS では、ほぼ同じ単純な同じコードですが、@MessageDriven アノテーションの代わりに、JMS コンシューマーを起動して実行するためにいくつかの初期化コードを実行する必要があります。もちろん、接続ファクトリの取得、接続の作成、宛先のルックアップなど、標準の JMS セットアップ手順も実行する必要があります。

public class MyConsumer implements MessageListener{ 


  public void init(Connection conn, Destination dest){
    // connection and destination from JNDI, or some other method.
    Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageConsumer cons = sess.createConsumer(dest);
    cons.setMessageListener(this);
    conn.start();
  }

  @Override
  public void onMessage(Message msg) {
    // Do whatever with message

   }
}
于 2012-07-24T21:52:45.657 に答える