熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

結合Spring2.0和ActiveMQ進行異步消息調用

2022-06-13   來源: Java開源技術 

  在Spring 之前Spring的JMS的作用局限於產生消息這個功能(封裝在 JmsTemplate 類中)當然是很好的 但是它沒有描述完整的JMS堆棧比如像消息的 異步 產生和消耗JMS堆棧缺少的這一部分已經被添加Spring 現在提供對消息異步消耗的完整支持
       讓我們從一個例子開始
       首先我們打開ActiveMQ從ActiveMQ的安裝路徑上的bin目錄那裡有一個ActiveMQbat雙擊執行即可不過要注意必須先設置java_home環境變量ActiveMQ默認的服務端口是
       然後我們開始配置Spring配置文件我起名為springjmsxml
    首先要配置一個ConnectionFactory代碼如下
    Copy code
    <bean id=connectionFactory
         class=orgapacheactivemqActiveMQConnectionFactory>
         <property name=brokerURL value=tcp://localhost: /> </bean>
      這裡用到的ConnectionFactory是ActiveMQ提供的工廠為了能使用這個工廠我們必須在項目中添加以下幾個jar文件 geronimojms__specjar activeiocorebetajar activemqcorejar backportutilconcurrentjar commonsloggingjar geronimojeemanagement__specjar 以上這些Jar文件都存在於ActiveMQ安裝目錄的lib目錄下這些可是我一個一個試驗出來的累個半死
    然後應該配置一個Queue(我使用的是點對點方式)不過ActiveMQ只要提供一個名字就可以自動創建隊列因此這一步省了
    下面就輪到Spring的支持類了首先是JmsTemplate這個類提供了大量的方法簡化我們對JMS的操作常用的有兩個orgsprreJmsTemplate和orgsprreJmsTemplate這兩個類分別支持JMS的版本和版本現在比較常用的還是版本配置如下
    Copy code
        <bean id=jmsTemplate
         class=orgsprreJmsTemplate>
         <property name=connectionFactory ref=connectionFactory/>
         <property name=timeToLive value=/>
         <property name=defaultDestinationName value=cmpp />
         <property name=messageConverter ref=messageConverter />
         <property name=receiveTimeout value= />
     </bean>
    上面的配置中用到了第一步配置的connectionFactory以及一個消息轉換的類messageConverter這個類實現了orgspringframenverterMessageConverter接口可以在消息發送之前和接受之後進行消息類型轉換具體的看最後的實例代碼配置代碼如下
    Copy code
        <! Spring JMS SimpleConverter >
        <bean id=simpleConverter  class=orgspringframenverterSimpleMessageConverter />
<! Message Converter >
     <bean id=messageConverter
         class=comliangjapmgtjmsApmgtMessageConverter>
         <property name=converter>
             <ref local=simpleConverter />
         </property>
     </bean>
 

  這裡還配置了發送的消息的存在時間timeToLive目標Queue的名字defaultDestinationName接受消息超時時間receiveTimeout
    配置發送代碼
    Copy code
        <! Message porducer >
     <bean id=producer
         class=comliangjapmgtjmsDefaultApmgtMessageProducer>
         <property name=jmsTemplate ref=jmsTemplate />
     </bean>
    接著配置監聽器這是Spring新增的功能配置如下
    Copy code
        <! this is the Message Driven POJO (MDP) >
     <bean id=messageListener
         class=orgspringframeworkjmslisteneradapterMessageListenerAdapter>
         <constructorarg>
             <bean
                 class=comliangjapmgtjmsDefaultApmgtMessageListener />
         </constructorarg>
         <property name=defaultListenerMethod value=onMessage />
         <property name=messageConverter ref=messageConverter />
     </bean>
     <! and this is the attendant message listener container >
     <bean id=listenerContainer
         class=orgspringframeworkjmslistenerDefaultMessageListenerContainer>
         <property name=connectionFactory ref=connectionFactory />
         <property name=destinationName value=${jmsdestinationNamecmpp} />
         <property name=messageSelector value=${ssageSelector} />
         <property name=messageListener ref=messageListener />
     </bean>
          Spring配置監聽器有很多種選擇在這裡我選擇這回種MessageListenerAdapter方法主要是因為這個方法比較靈活實現他只要一個很普通的java類即可和JMS以及Spring的耦合度最低其中方法onMessage可以隨便修改方法名只要在配置文件中對應的修改就好了
      MessageListenerAdapter還有一個功能就是如果處理方法(我這裡是onMessage)返回一個非空值它將自動返回一個響應消息這個消息會返回給JMS ReplyTo屬性定義的目的地(如果存在)或者MessageListenerAdapter設置(如果配置了)的缺省目的地如果沒有定義目的地那麼將產生一個InvalidDestinationException異常(此異常將不會只被捕獲而不處理它將沿著調用堆棧上傳)


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28230.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.