activeMQ統合スプリングの使い方

6726 ワード

問題二:JMSTemplateテンプレートはどのように配置すればいいですか?
jdbcTemplateに似ています.まずConnection Factoryを配置して、ActiveMQ 5.2をメッセージサーバとして採用します.その後、JmsTemplateテンプレートの設定を開始します.最後にメッセージターゲットを設定します.メッセージはキューとテーマの2つのカテゴリに分けられていますので、2つのメッセージターゲットを設定します.
       :
<!-- ActiveMQ -->   
       
    <!--   JMS     -->     
    <bean id="JmsConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">     
        <property name="brokerURL" value="tcp://localhost:61616"/>     
    </bean>     
    <!--   JMS   -->     
    <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">     
        <property name="connectionFactory" ref="JmsConnectionFactory"/>     
    </bean>     
    <!--         (  ) -->     
    <bean id="QueueDestination" class="org.apache.activemq.command.ActiveMQQueue">     
        <!--           -->     
        <constructor-arg index="0" value="HelloWorldQueue"/>     
    </bean>   
    <!--         (  ) -->     
    <bean id="TopicDestination" class="org.apache.activemq.command.ActiveMQTopic">     
        <!--           -->     
        <constructor-arg index="0" value="FlexTopic"/>     
    </bean>     
<!-- ActiveMQ --> 
 
質問3:どのようにJmsTemplateを使ってメッセージを送りますか?
springのbeanfactoryはjmsTemplateのインスタンスとメッセージターゲットのインスタンスを得て、メッセージを送るのは簡単だろう.コードを見る:
JmsTemplate template = (JmsTemplate) SpringContext.getBean("JmsTemplate");   
            ActiveMQTopic destination=(ActiveMQTopic)SpringContext.getBean("TopicDestination");   
            template.send((javax.jms.Destination) destination, new MessageCreator(){   
                public Message createMessage(Session session) throws JMSException {   
                    return session.createTextMessage("hello");   
                }   
                   
            }); 
 問題四:上のコードは簡単にできますか?
多くの場合、メッセージの送信先はデフォルトですので、jmsTemplateにデフォルトのメッセージターゲットを設定できますか?答えは肯定的です.
<!--   JMS   -->     
   <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">     
    <property name="connectionFactory" ref="JmsConnectionFactory"/>   
    <property name="defaultDestination" ref="TopicDestination"></property>   
   </bean>    
 
問題四:jmsTemplateはどうやって情報を受け取りますか?
jmsTemplate受信メッセージは非常に簡単で、template.receive()メソッドを呼び出すだけで、receive方法は同期されています.デフォルトでは、receive()メソッドの呼び出しがブロックされ、メッセージが目的に達することを知っています.メッセージ内容の待ち時間を回避するために、jmsTemplateを設定することができる場合は、receive Timeout属性を設定することにより、受信メッセージのタイムアウト時間を指定します.以下の構成では、受信メッセージのタイムアウト時間を1分間(60000ミリ秒)に設定します.
<!--   JMS   -->     
   <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">     
    <property name="connectionFactory" ref="JmsConnectionFactory"/>  
    <property name="defaultDestination" ref="TopicDestination"></property>  
    <property name="receiveTimeout" value="60000"></property>  
   </bean>     
 
問題5:どのように自動的にメッセージをJavaオブジェクトに変換しますか?
トランスコーダは多くのコンポーネントの中で欠かせないものです.SpringはMessage Coverterインターフェースを通じてメッセージ変換のサポートを提供しています.
 
public class MyMessageConverter implements MessageConverter {   
    @Override  
    public Object fromMessage(Message arg0) throws JMSException,   
            MessageConversionException {   
        // TODO Auto-generated method stub   
        return null;   
    }   
    @Override  
    public Message toMessage(Object arg0, Session arg1) throws JMSException,   
            MessageConversionException {   
        // TODO Auto-generated method stub   
        return null;   
    }   
}   
 Message Coverterインターフェースの二つの方法は簡単明瞭である.送信側toMessageでは、javaオブジェクトをメッセージに変換し、受信側ではfrom Messageでメッセージをjavaオブジェクトに変換する.
以下のコードは簡単にMessage Coverterの二つのインターフェースを実現しました.
public class MyMessageConverter implements MessageConverter {   
    @Override  
    public Object fromMessage(Message message) throws JMSException,   
            MessageConversionException {   
        if(!(message instanceof MapMessage)){   
            throw new MessageConversionException("Messae is not MapMessage");   
        }   
        MapMessage mapMessage=(MapMessage)message;   
        MessageObj messageObj=new MessageObj();   
        messageObj.setId(mapMessage.getString("id"));   
        messageObj.setInfo(mapMessage.getString("info"));   
        return messageObj;   
    }   
    @Override  
    public Message toMessage(Object obj, Session session) throws JMSException,   
            MessageConversionException {   
        if(!(obj instanceof MessageObj)){   
            throw new MessageConversionException("obj is not MessageObj");   
        }   
        MessageObj messageObj=(MessageObj)obj;   
        MapMessage mapMessage=session.createMapMessage();   
        mapMessage.setString("id", messageObj.getId());   
        mapMessage.setString("info", messageObj.getInfo());   
        return mapMessage;   
    }   
}   
 このとき、メッセージの送信と受信は、template.co nvertAndSendに変更される.template.receive AndConvert()
しかし、jmsTemplateはどうやってメッセージ変換器を知っていますか?jmsTemplateを配置する際に、message Coverter属性を追加する必要があります.
 
<!--   JMS   -->     
   <bean id="JmsTemplate" class="org.springframework.jms.core.JmsTemplate">     
    <property name="connectionFactory" ref="JmsConnectionFactory"/>   
    <property name="defaultDestination" ref="TopicDestination"></property>   
    <property name="receiveTimeout" value="60000"></property>   
    <property name="messageConverter

" ref="messageObj"></property>   
   </bean>     
 
message Objは、変換されるjavaオブジェクトのbeanのidである.