摘要:消費者,監聽生產者往指定目的地發送消息后,接下來就是消費者對指定目的地的消息進行消費了。它不會動態的適應運行時需要和參與外部的事務管理。它很好的平衡了對提供者要求低先進功能如事務參與和兼容環境。
深入淺出 JMS(七) - ActiveMQ 與 Spring 整合 一、與spring整合實現ptp的同步接收消息 (1)config.properties
## ActiveMQ Config activemq.brokerURL=tcp://127.0.0.1:61616 activemq.userName=admin activemq.password=password activemq.pool.maxConnection=10 activemq.queue=mailqueue activemq.topic=mailtopic(2)pom.xml
(3)spring-jms.xmlorg.springframework spring-jms 4.3.7.RELEASE org.apache.activemq activemq-pool 5.15.3
ConnectionFactory 是用于產生到 JMS 服務器的鏈接的,Spring 為我們提供了多個 ConnectionFactory,有 SingleConnectionFactory 和 CachingConnectionFactory。
SingleConnectionFactory :對于建立 JMS 服務器鏈接的請求會一直返回同一個鏈接,并且會忽略 Connection 的 close 方法調用。
CachingConnectionFactory :繼承了 SingleConnectionFactory,所以它擁有 SingleConnectionFactory 的所有功能,同時它還新增了緩存功能,它可以緩存 Session、MessageProducer 和 MessageConsumer。這里我們使用 CachingConnectionFactory 來作為示例。
(4)生產者import com.alibaba.fastjson.JSONObject; import com.github.binarylei.jms.spring.core.Mail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Service; /** * @author: leigang * @version: 2018-04-03 */ @Service("mqProducer") public class MQProducer { @Autowired private JmsTemplate jmsTemplate; public void sendMail(Mail mail) { jmsTemplate.send((session) -> { return session.createTextMessage(JSONObject.toJSONString(mail)); }); } }(5)消費者
import com.alibaba.fastjson.JSONObject; import com.github.binarylei.jms.spring.core.Mail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Service; import javax.jms.Destination; /** * @author: leigang * @version: 2018-04-03 */ @Service("mqCustumer") public class MQCustumer { @Autowired private JmsTemplate jmsTemplate; @Autowired private Destination destination; public void sendMail() { String json = (String) jmsTemplate.receiveAndConvert(destination); Mail mail = (Mail) JSONObject.parseObject(json, Mail.class); System.out.println(mail); } }二、PTP 的異步調用
我們在 spring 中直接配置異步接收消息的監聽器,這樣就相當于在 spring 中配置了消費者,在接受消息的時候就不必要啟動消費者了。
spring-jms.xml:
生產者往指定目的地 Destination 發送消息后,接下來就是消費者對指定目的地的消息進行消費了。那么消費者是如何知道有生產者發送消息到指定目的地 Destination了呢?這是通過 Spring 為我們封裝的消息監聽容器 MessageListenerContainer 實現的,它負責接收信息,并把接收到的信息分發給真正的 MessageListener 進行處理。
每個消費者對應每個目的地都需要有對應的 MessageListenerContainer。對于消息監聽容器而言,除了要知道監聽哪個目的地之外,還需要知道到哪里去監聽,也就是說它還需要知道去監聽哪個 JMS 服務器,這是通過在配置 MessageConnectionFactory 的時候往里面注入一個 ConnectionFactory 來實現的。所以我們在配置一個 MessageListenerContainer 的時候有三個屬性必須指定,一個是表示從哪里監聽的 ConnectionFactory;一個是表示監聽什么的 Destination;一個是接收到消息以后進行消息處理的 MessageListener。
Spring 一共為我們提供了兩種類型的 MessageListenerContainer:
SimpleMessageListenerContainer :SimpleMessageListenerContainer 會在一開始的時候就創建一個會話 session 和消費者 Consumer,并且會使用標準的 JMS MessageConsumer.setMessageListener() 方法注冊監聽器讓 JMS 提供者調用監聽器的回調函數。它不會動態的適應運行時需要和參與外部的事務管理。兼容性方面,它非常接近于獨立的 JMS 規范,但一般不兼容 Java EE 的 JMS 限制。
DefaultMessageListenerContainer :在大多數情況下我們還是使用的 DefaultMessageListenerContainer,跟SimpleMessageListenerContainer 相比,DefaultMessageListenerContainer 會動態的適應運行時需要,并且能夠參與外部的事務管理。它很好的平衡了對 JMS 提供者要求低、先進功能如事務參與和兼容 Java EE 環境。
消息監聽器:
import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; /** * @author: leigang * @version: 2018-04-03 */ public class MessageListener implements javax.jms.MessageListener { @Override public void onMessage(Message message) { TextMessage msg = (TextMessage) message; try { System.out.println("消息:" + msg.getText()); } catch (JMSException e) { e.printStackTrace(); } } }三、發布訂閱 同步接收
在 spring-jms.xml 中將 ActiveMQTopic 生成 Topic,其它沒什么變化:
每天用心記錄一點點。內容也許不重要,但習慣很重要!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68917.html
摘要:介紹它是出品,最流行的,能力強勁的開源消息總線。是一個完全支持和規范的實現,盡管規范出臺已經是很久的事情了,但是在當今的應用中間仍然扮演著特殊的地位。相關文章整合使用整合使用關注我轉載請務必注明原創地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...
摘要:學習消息隊列的使用之前,我們先來搞清。是操作消息的接口。消息生產者由創建,并用于將消息發送到。接收消息打印結果這是接收到的消息消費者啟動。。。。 通過上一篇文章 《消息隊列深入解析》,我們已經消息隊列是什么、使用消息隊列的好處以及常見消息隊列的簡單介紹。 這一篇文章,主要帶大家詳細了解一下消息隊列ActiveMQ的使用。 學習消息隊列ActiveMQ的使用之前,我們先來搞清JMS。 J...
摘要:最近在研究的消息確認機制,在與整合時遇到的了一個問題。這時只需要把的值設置成自定義的類型即可。 最近在研究activemq的ack消息確認機制,在activemq與spring整合時遇到的了一個問題。JMS規范的ack消息確認機制有一下四種,定于在session對象中:AUTO_ACKNOWLEDGE = 1 :自動確認CLIENT_ACKNOWLEDGE = 2:客戶端手動確認 DU...
摘要:安裝到官方網站下載最新的的安裝包,并解壓到本地目錄下,下載鏈接如下。修改消費者使用配置消費者監聽的隊列,其中是接收到的消息收到的報文為接收到的消息重新執行 安裝ActiveMQ 到Apache官方網站下載最新的ActiveMQ的安裝包,并解壓到本地目錄下,下載鏈接如下:http://activemq.apache.org/do...。showImg(https://segmentfau...
閱讀 1469·2021-09-10 11:27
閱讀 2416·2019-08-30 15:53
閱讀 1336·2019-08-30 13:10
閱讀 2984·2019-08-30 11:09
閱讀 1094·2019-08-29 17:23
閱讀 673·2019-08-29 17:05
閱讀 2954·2019-08-29 15:10
閱讀 2350·2019-08-29 13:22