Spring+JMS+ActiveMQ+Tomcat實現消息服務

基於Spring+JMS+ActiveMQ+Tomcat,我使用的版本情況如下所示:

  • Spring 2.5
  • ActiveMQ 5.4.0
  • Tomcat 6.0.30

下面通過學習與配置,實現消息服務的基本功能:發送與接收。Spring對JMS提供了很好的支持,可以通過JmsTemplate來方便地實現消息服務。這裏,我們的消息服務不涉及事務管理。下面簡單說明實現過程:

先看一下,我們最終的Spring配置文件applicationContext.xml的內容,如下所示:

我們使用Spring的org.springframework.jms.listener.DefaultMessageListenerContainer來收集消息,通過設置一個消息監聽器,具體實現類爲org.shirdrn.spring.jms.integration.ReceiveMessageListener,代碼如下所示:

上面,對發送的消息進行監聽,並接收處理,我們只是簡單地打印出一條日誌內容。

對於listenerContainer,還需要注入連接工廠connectionFactory和消息目的destination這兩個屬性:connectionFactory我們使用ActiveMQ的org.apache.activemq.ActiveMQConnectionFactory,並通過JNDI服務,綁定到名字java:comp/env/myJMS/ConnectionFactory上;而destination屬性通過使用ActiveMQ的org.apache.activemq.command.ActiveMQQueue消息隊列,也是通過JNDI服務綁定到名字java:comp/env/myJMS/MessageQueue上。所以,在Tomcat的conf/context.xml中的<Context>元素裏面加上如下配置:

我們通過使用JmsTemplate來實現消息的發送,所以實現的發送類要將JmsTemplate注入進去,實現代碼如下所示:

上面基於Spring的MessageCreator來創建消息,通過調用JmsTemplate的send方法發送出去。

對於Web,我們使用了Spring MVC,通過實現一個控制器org.shirdrn.spring.jms.integration.SendMessageController來控制頁面消息的發送及其視圖的派發。我們實現的SendMessageController類繼承自MultiActionController,可以在一個控制器中實現多個Action,代碼實現如下所示:

上面調用模型層(Model)的MessageSender來實現發送消息的處理邏輯,如果發送成功,視圖派發到successView指定的頁面。可以看到,最前面我們給出的Spring配置內容分爲三組,最後一組是對控制器的配置:

viewResolver                     視圖解析器配置,可以將控制器中指定前綴(/)解析爲後綴是.jsp的頁面,例如/success解析爲/sucess.jsp

urlMapping                         請求URL與控制器的映射,例如對於滿足/sendMessage.do模式的請求,都會被指派給sendMessageController去處理

sendMessageController      控制器實現類,裏面的方法名稱可以自定義,但要在org.springframework.web.servlet.handler.SimpleUrlHandlerMapping中的mappings屬性中配置映射

然後,我們需要一個web部署描述文件,web.xml文件配置內容,如下所示:

另外,我們還要實現一個頁面,提供輸入發送消息的表單,提交後交給後臺處理,成功發送後跳轉到一個成功頁面。表單輸入頁面爲index.jsp,如下所示:

成功頁面爲success.jsp,就是給一個成功的提示信息,如下所示:

至此,我們可以將實現的簡單web工程發佈到Tomcat容器,然後啓動Tomcat服務器,通過頁面可以發送消息,並通過日誌查看,實際消息發送和接收的情況。 

發佈了73 篇原創文章 · 獲贊 19 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章