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

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

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

    Terry.Li-彬

    虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks

    簡(jiǎn)介

    實(shí)戰(zhàn)一 , 實(shí)戰(zhàn)二介紹了ActiveMQ的基本概念和配置方式.

    本篇將通過(guò)一個(gè)實(shí)例介紹使用spring發(fā)送,消費(fèi)topic, queue類型消息的方法. 不懂topic和queue的google 之.

     

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

    1. TopicMessageProducer向topic發(fā)送消息, TopicConsumerA和TopicConsumerB則從topic消費(fèi)消息.
    2. QueueMessageProducer向Queue發(fā)送消息, QueueConsumer從Queue中消費(fèi)消息

    Spring整合JMS

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

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

    下面以實(shí)例的方式介紹上面8個(gè)部分.

    1. ConnectionFactory

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

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

    Xml代碼 復(fù)制代碼
    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

     在實(shí)例中我們使用了兩種destination

    Xml代碼 復(fù)制代碼
    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代碼 復(fù)制代碼
    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實(shí)現(xiàn)的是org.springframework.jms.support.converter.MessageConverter接口, 提供消息的轉(zhuǎn)換功能. DefaultMessageConverter的實(shí)現(xiàn)見附件.

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

      5. MessageProducer

       實(shí)例擁有兩個(gè)消息生產(chǎn)者, 消息生產(chǎn)者都是POJO, 實(shí)現(xiàn)見附件.

    Xml代碼 復(fù)制代碼
    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通道有兩個(gè)消息消費(fèi)者, QUEUE有一個(gè)消息消費(fèi)者

    Xml代碼 復(fù)制代碼
    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

    每一個(gè)消息消費(fèi)者都對(duì)應(yīng)一個(gè)MessageListener

    Xml代碼 復(fù)制代碼
    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

     有幾個(gè)MessageListener既有幾個(gè)MessageListenerContainer

    Xml代碼 復(fù)制代碼
    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配置文件的時(shí)候, 要把MessageProducer, MessageConsumer,MessageListener,MessageListenerContainer幾個(gè)地方弄清楚:

    1. 可以有一個(gè)或者多個(gè)消息生產(chǎn)者向同一個(gè)destination發(fā)送消息.
    2. queue類型的只能有一個(gè)消息消費(fèi)者.
    3. topic類型的可以有多個(gè)消息消費(fèi)者.
    4. 每個(gè)消費(fèi)者對(duì)應(yīng)一個(gè)MessageListener和一個(gè)MessageListenerContainer.

     

    posted on 2008-12-31 22:10 禮物 閱讀(4081) 評(píng)論(0)  編輯  收藏 所屬分類: JMS
    主站蜘蛛池模板: 日本大片在线看黄a∨免费| 亚洲一级毛片在线播放| 巨胸喷奶水视频www网免费| a级毛片免费在线观看| 久久亚洲精品高潮综合色a片| 亚洲资源在线观看| 国产精品V亚洲精品V日韩精品| 成人免费视频试看120秒| 99爱在线观看免费完整版| 4hu四虎免费影院www| 韩国亚洲伊人久久综合影院| 亚洲一区二区三区不卡在线播放| 狠狠色伊人亚洲综合成人| 亚洲无码黄色网址| 免费h黄肉动漫在线观看 | 在线日韩日本国产亚洲| 国产伦精品一区二区三区免费下载| 国产成人免费网站| 久久久久久精品免费看SSS| 免费视频成人手机在线观看网址| 亚欧国产一级在线免费| 日韩一级片免费观看| 美女视频黄频a免费大全视频| 亚洲久热无码av中文字幕| 精品亚洲456在线播放| 亚洲美女大bbbbbbbbb| 久久亚洲精品成人AV| 亚洲综合成人网在线观看| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲处破女AV日韩精品| 久久久久久久尹人综合网亚洲| 久久精品国产精品亚洲下载| 久久亚洲国产精品123区| 亚洲综合最新无码专区| 亚洲色偷拍另类无码专区| 国产亚洲精品一品区99热| 日韩精品一区二区亚洲AV观看| 亚洲国产高清人在线| 亚洲精品亚洲人成在线麻豆| 亚洲中文字幕久在线| 亚洲中文字幕久久精品无码VA|