- 首先要配置一個ConnectionFactory代碼如下
Copy code
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean>
這裏用到的ConnectionFactory是ActiveMQ提供的工廠,爲了能使用這個工廠,我們必須在項目中添加以下幾個jar文件: geronimo-jms_1.1_spec-1.0.jar, activeio-core-3.0-beta3.jar, activemq-core-4.0.1.jar, backport-util-concurrent-2.1.jar, commons-logging-1.0.4.jar, geronimo-j2ee-management_1.0_spec-1.0.jar 以上這些Jar文件都存在於ActiveMQ安裝目錄的lib目錄下,這些可是我一個一個試驗出來的,累個半死。。 - 然後應該配置一個Queue(我使用的是點對點方式),不過ActiveMQ只要提供一個名字就可以自動創建隊列,因此這一步省了,呵呵
- 下面就輪到Spring的支持類了,首先是JmsTemplate。這個類提供了大量的方法簡化我們對JMS的操作。常用的有兩個,org.springframework.jms.core.JmsTemplate102和org.springframework.jms.core.JmsTemplate,這兩個類分別支持JMS的1.02版本和1.1版本。現在比較常用的還是1.02版本。配置如下
Copy code
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102"> <property name="connectionFactory" ref="connectionFactory"/> <property name="timeToLive" value="86400000"/> <property name="defaultDestinationName" value="cmpp" /> <property name="messageConverter" ref="messageConverter" /> <property name="receiveTimeout" value="30000" /> </bean>
上面的配置中用到了第一步配置的connectionFactory以及一個消息轉換的類messageConverter,這個類實現了org.springframework.jms.support.converter.MessageConverter接口,可以在消息發送之前和接受之後進行消息類型轉換。具體的看最後的實例代碼。配置代碼如下:Copy code
<!-- Spring JMS SimpleConverter --> <bean id="simpleConverter" class="org.springframework.jms.support.converter.SimpleMessageConverter" /> <!-- Message Converter --> <bean id="messageConverter" class="com.liangj.apmgt.jms.ApmgtMessageConverter"> <property name="converter"> <ref local="simpleConverter" /> </property> </bean>
這裏還配置了發送的消息的存在時間timeToLive,目標Queue的名字defaultDestinationName,接受消息超時時間receiveTimeout - 配置發送代碼
Copy code
<!-- Message porducer --> <bean id="producer" class="com.liangj.apmgt.jms.DefaultApmgtMessageProducer"> <property name="jmsTemplate" ref="jmsTemplate" /> </bean>
- 接着配置監聽器,這是Spring2.0新增的功能,配置如下:
Copy code
<!-- this is the Message Driven POJO (MDP) --> <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg> <bean class="com.liangj.apmgt.jms.DefaultApmgtMessageListener" /> </constructor-arg> <property name="defaultListenerMethod" value="onMessage" /> <property name="messageConverter" ref="messageConverter" /> </bean> <!-- and this is the attendant message listener container --> <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destinationName" value="${jms.destinationName.cmpp}" /> <property name="messageSelector" value="${jms.messageSelector}" /> <property name="messageListener" ref="messageListener" /> </bean>
Spring配置監聽器有很多種選擇,在這裏我選擇這回種MessageListenerAdapter方法主要是因爲這個方法比較靈活。實現他只要一個很普通的java類即可,和JMS以及Spring的耦合度最低。其中方法onMessage可以隨便修改方法名,只要在配置文件中對應的修改就好了。 MessageListenerAdapter還有一個功能就是如果處理方法(我這裏是onMessage)返回一個非空值,它將自動返回一個響應消息。這個消息會返回給JMS Reply-To屬性定義的目的地(如果存在),或者是MessageListenerAdapter設置(如果配置了)的缺省目的地;如果沒有定義目的地,那麼將產生一個InvalidDestinationException異常(此異常將不會只被捕獲而不處理,它將沿着調用堆棧上傳)。 這樣我們的配置就都完成了。接下來我們來實現對應的Java文件先是接口文件發送消息接口IApmgtMessageProducer.java
http://blog.iecn.net/blog-html-do-showone-uid-30995-type-blog-itemid-1035.html