ActiveMQ Springでのメッセージの非同期受信(6)


転載は出典:http://eksliang.iteye.com/blog/2243158
一、概説
     JmsTemplateのreceive()メソッドが呼び出されると、JmsTemplateはActiveMQからメッセージを取得しようとします.使用可能なメッセージがない場合、receive()メソッドはメッセージが取得されるまで待機します.すなわち,このメソッドは同期される.これは、受信者がメッセージの到来を辛抱強く待たなければならないことを意味し、receive()メソッドは、利用可能なメッセージ(またはメッセージタイムアウト)があるまでブロックされる.
     Spring 2.0は、EJB 3のMDBと非常に類似した非同期受信メッセージのニーズを満たすために独自のメッセージ駆動Bean形式を提供することが好ましい.ここでは最もポピュラーなメッセージドライバPOJO(Springベース)、EJB 3の紹介は行いません.
 
二、POJOを宣言して非同期にメッセージを受信する
メッセージを送信するコードは次のとおりです.
	/**
	 *   JmsTemplate       
	 * @param user
	 */
	public void send(final User user){
		jmsTemplate.send(new MessageCreator() {
			@Override
			public ObjectMessage createMessage(Session session) throws JMSException {
				ObjectMessage msg = session.createObjectMessage();
				msg.setObject(user);
				return msg;
			}
		});
	}

 
次のようにメッセージコードを受信するためにUserHandlerを宣言します.
package com.gosun.jms.pojo;

import com.gosun.jms.domain.User;

public class UserHandler{

	public void handler(User user){
		System.out.println("      :"+user);
	}
	
}

 Springは、JMSキューまたはトピックからのメッセージをPOJOで処理できる能力を提供します.これがSpringの強みです.
 
三、メッセージリスナーの構成
POJOにメッセージを受信する能力を与えるにはspringでメッセージドライバとして構成する必要がある.Springのjmsネーミングスペースは私たちに必要なすべてを提供してくれました.コードは以下の通り、上のPOJO(UserHandler)を、メッセージドライバコードは以下のように構成する.
<bean id="userHandler" class="com.gosun.jms.pojo.UserHandler"></bean>
	
<jms:listener-container connection-factory="connectionFactory">
	<!--       -->
	<jms:listener destination="queue.destination" ref="userHandler" method="handler"/>
</jms:listener-container>

 
 上記のコードでは、メッセージリスナーコンテナにメッセージリスナーが含まれています.メッセージリスナーコンテナは特殊なbeanであり、JMSの宛先を監視し、メッセージの到着を待つことができる.メッセージが到着すると、彼はメッセージを取り出し、このメッセージに興味のあるメッセージリスナーにメッセージを伝えます.
  • :メッセージドライブコンテナ、connection-factory=「connectionFactory」プロパティで接続ファクトリが構成されています.コンテナ内のは、この接続工場を使用して傍受する.
  • :beanとメッセージを処理できる方法を識別するメッセージリスナー.

  •