<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    簡介

    實戰一 , 實戰二介紹了ActiveMQ的基本概念和配置方式.

    本篇將通過一個實例介紹使用spring發送,消費topic, queue類型消息的方法. 不懂topic和queue的google 之.

     

    如圖示, TOPIC和QUEUE分別代表一個topic和一個queue消息通道.

    1. TopicMessageProducer向topic發送消息, TopicConsumerA和TopicConsumerB則從topic消費消息.
    2. QueueMessageProducer向Queue發送消息, QueueConsumer從Queue中消費消息

    Spring整合JMS

    就像對orm, web的支持一樣, spring同樣支持jms, 為整合jms到已有的項目提供了很多便利的方法. 本篇主要講實戰, 是所以先從配置開始, spring配置jms基本上需要8個部分.

    1. ConnectionFactory. 和jms服務器的連接, 可以是外部的jms server, 也可以使用embedded ActiveMQ Broker.
    2. Destination. 有topic和queue兩種方式.
    3. JmsTemplate. spring提供的jms模板.
    4. MessageConverter. 消息轉換器.
    5. MessageProducer. 消息生產者.
    6. MessageConsumer. 消息消費者.
    7. MessageListener. 消息監聽器
    8. MessageListenerContainer. 消息監聽容器

    下面以實例的方式介紹上面8個部分.

    1. ConnectionFactory

    Xml代碼 復制代碼
    1. <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" />  

     brokerURL是指要連接的activeMQ server的地址, activeMQ提供了多種brokerURL, 集體可參見文檔.一般我們使用嵌套的ActiveMQ server. 配置如下, 這個配置使用消息的存儲機制, 服務器重啟也不會丟失消息.

    Xml代碼 復制代碼
    1. <!--  embedded ActiveMQ Broker -->  
    2.     <amq:broker useJmx="false" persistent="true">  
    3.         <amq:persistenceAdapter>  
    4.             <amq:amqPersistenceAdapter directory="d:/amq"/>  
    5.         </amq:persistenceAdapter>  
    6.         <amq:transportConnectors>  
    7.             <amq:transportConnector uri="tcp://localhost:61616" />  
    8.                        <amq:transportConnector uri="vm://localhost:0" />  
    9.         </amq:transportConnectors>  
    10.     </amq:broker>  

     2. Destination

     在實例中我們使用了兩種destination

    Xml代碼 復制代碼
    1. <!--  ActiveMQ destinations  -->  
    2. <!--  使用topic方式-->  
    3. <amq:topic name="TOPIC" physicalName="JMS-TEST-TOPIC" />  
    4. <!--  使用Queue方式-->  
    5. <amq:queue name="QUEUE" physicalName="JMS-TEST-QUEUE" />  

     3. JmsTemplate

    Xml代碼 復制代碼
    1. <!--  Spring JmsTemplate config -->  
    2.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
    3.         <property name="connectionFactory">  
    4.             <!--  lets wrap in a pool to avoid creating a connection per send -->  
    5.             <bean class="org.springframework.jms.connection.SingleConnectionFactory">  
    6.                 <property name="targetConnectionFactory" ref="jmsConnectionFactory" />  
    7.             </bean>  
    8.         </property>  
    9.         <!-- custom MessageConverter -->  
    10.         <property name="messageConverter" ref="defaultMessageConverter" />  
    11.     </bean>  

      4. MessageConverter

       MessageConverter實現的是org.springframework.jms.support.converter.MessageConverter接口, 提供消息的轉換功能. DefaultMessageConverter的實現見附件.

    Xml代碼 復制代碼
    1. <bean id="defaultMessageConverter" class="com.andyao.activemq.DefaultMessageConverter" />  

      5. MessageProducer

       實例擁有兩個消息生產者, 消息生產者都是POJO, 實現見附件.

    Xml代碼 復制代碼
    1. <!-- POJO which send Message uses  Spring JmsTemplate -->  
    2.     <bean id="topicMessageProducer" class="com.andyao.activemq.TopicMessageProducer">  
    3.         <property name="template" ref="jmsTemplate" />  
    4.         <property name="destination" ref="TOPIC" />  
    5.     </bean>  
    6.     <bean id="queueMessageProducer" class="com.andyao.activemq.QueuMessageProducer">  
    7.         <property name="template" ref="jmsTemplate" />  
    8.         <property name="destination" ref="QUEUE" />  
    9.     </bean>  

     6. MessageConsumer

     TOPIC通道有兩個消息消費者, QUEUE有一個消息消費者

    Xml代碼 復制代碼
    1. <!--  Message Driven POJO (MDP) -->  
    2.     <!-- consumer1 for topic a -->  
    3.     <bean id="topicConsumerA" class="com.andyao.activemq.TopicConsumerA" />  
    4.     <!-- consumer2 for topic a -->  
    5.     <bean id="topicConsumerB" class="com.andyao.activemq.TopicConsumerB" />  
    6.     <!-- consumer for queue -->  
    7.     <bean id="queueConsumer" class="com.andyao.activemq.QueueConsumer" />  

      7. MessageListener

    每一個消息消費者都對應一個MessageListener

    Xml代碼 復制代碼
    1. <bean id="topicListenerA" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
    2.         <constructor-arg ref="topicConsumerA" />  
    3.         <!--  may be other method -->  
    4.         <property name="defaultListenerMethod" value="receive" />  
    5.         <!-- custom MessageConverter define -->  
    6.         <property name="messageConverter" ref="defaultMessageConverter" />  
    7.     </bean>  
    8.   
    9.     <bean id="topicListenerB" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
    10.         <constructor-arg ref="topicConsumerB" />  
    11.         <!--  may be other method -->  
    12.         <property name="defaultListenerMethod" value="receive" />  
    13.         <!-- custom MessageConverter define -->  
    14.         <property name="messageConverter" ref="defaultMessageConverter" />  
    15.     </bean>  
    16.   
    17.     <bean id="queueListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
    18.         <constructor-arg ref="queueConsumer" />  
    19.         <!--  may be other method -->  
    20.         <property name="defaultListenerMethod" value="receive" />  
    21.         <!-- custom MessageConverter define -->  
    22.         <property name="messageConverter" ref="defaultMessageConverter" />  
    23.     </bean>  

     8. MessageListenerContainer

     有幾個MessageListener既有幾個MessageListenerContainer

    Xml代碼 復制代碼
    1. <bean id="topicListenerContainerA" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
    2.         <property name="connectionFactory" ref="jmsConnectionFactory" />  
    3.         <property name="destination" ref="TOPIC" />  
    4.         <property name="messageListener" ref="topicListenerA" />  
    5.     </bean>  
    6.   
    7.     <bean id="topicListenerContainerB" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
    8.         <property name="connectionFactory" ref="jmsConnectionFactory" />  
    9.         <property name="destination" ref="TOPIC" />  
    10.         <property name="messageListener" ref="topicListenerB" />  
    11.     </bean>  
    12.        
    13.     <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
    14.         <property name="connectionFactory" ref="jmsConnectionFactory" />  
    15.         <property name="destination" ref="QUEUE" />  
    16.         <property name="messageListener" ref="queueListener" />  
    17.     </bean>  

      Summary

    寫spring配置文件的時候, 要把MessageProducer, MessageConsumer,MessageListener,MessageListenerContainer幾個地方弄清楚:

    1. 可以有一個或者多個消息生產者向同一個destination發送消息.
    2. queue類型的只能有一個消息消費者.
    3. topic類型的可以有多個消息消費者.
    4. 每個消費者對應一個MessageListener和一個MessageListenerContainer.

     

    posted on 2008-12-31 22:10 禮物 閱讀(4069) 評論(0)  編輯  收藏 所屬分類: JMS
    主站蜘蛛池模板: 国产成人亚洲精品狼色在线| 国产午夜不卡AV免费| 亚洲福利电影在线观看| 免费一区二区三区四区五区| 野花高清在线观看免费完整版中文 | 亚洲综合国产精品第一页| AV免费网址在线观看| 99re在线这里只有精品免费| 国产精品免费看久久久香蕉| 欧洲亚洲综合一区二区三区| 亚洲AV无码久久久久网站蜜桃| 亚洲av日韩综合一区在线观看| 精品国产亚洲一区二区在线观看 | 亚洲国产精品婷婷久久| 亚洲人成网站在线观看青青| 手机看片久久国产免费| 好爽…又高潮了免费毛片| 黄网站色在线视频免费观看| 无码中文字幕av免费放dvd| 国产va免费观看| 一本岛v免费不卡一二三区| 美女无遮挡免费视频网站| 亚洲av永久无码精品网址| 亚洲欧美日韩国产精品一区| 亚洲人成图片网站| 亚洲国产日韩视频观看| 亚洲videos| 麻豆狠色伊人亚洲综合网站| 无码人妻久久一区二区三区免费 | 亚洲av色福利天堂| 久热综合在线亚洲精品| 亚洲色精品vr一区二区三区| 伊人久久大香线蕉亚洲五月天| 久久久久亚洲AV综合波多野结衣 | 无遮挡国产高潮视频免费观看| 国产精品亚洲综合| 日日摸夜夜添夜夜免费视频| 一级特黄色毛片免费看| 久久免费99精品国产自在现线 | 亚洲第一网站男人都懂| 亚洲精品国精品久久99热|