国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入淺出 JMS(七) - ActiveMQ 與 Spring 整合

NoraXie / 3651人閱讀

摘要:消費者,監聽生產者往指定目的地發送消息后,接下來就是消費者對指定目的地的消息進行消費了。它不會動態的適應運行時需要和參與外部的事務管理。它很好的平衡了對提供者要求低先進功能如事務參與和兼容環境。

深入淺出 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


    org.springframework
    spring-jms
    4.3.7.RELEASE



    org.apache.activemq
    activemq-pool
    5.15.3
(3)spring-jms.xml



    
    
        
        
        
    

    
    
        
        
    
    
    
        
    

    
    
        
        
        
    

    
    
        
        
    

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

相關文章

  • SpringBoot ActiveMQ 整合使用

    摘要:介紹它是出品,最流行的,能力強勁的開源消息總線。是一個完全支持和規范的實現,盡管規范出臺已經是很久的事情了,但是在當今的應用中間仍然扮演著特殊的地位。相關文章整合使用整合使用關注我轉載請務必注明原創地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...

    gaara 評論0 收藏0
  • 消息隊列ActiveMQ的使用詳解

    摘要:學習消息隊列的使用之前,我們先來搞清。是操作消息的接口。消息生產者由創建,并用于將消息發送到。接收消息打印結果這是接收到的消息消費者啟動。。。。 通過上一篇文章 《消息隊列深入解析》,我們已經消息隊列是什么、使用消息隊列的好處以及常見消息隊列的簡單介紹。 這一篇文章,主要帶大家詳細了解一下消息隊列ActiveMQ的使用。 學習消息隊列ActiveMQ的使用之前,我們先來搞清JMS。 J...

    niceforbear 評論0 收藏0
  • activemqspring整合,配置消費者監聽器設置sessionAcknowledgeMode

    摘要:最近在研究的消息確認機制,在與整合時遇到的了一個問題。這時只需要把的值設置成自定義的類型即可。 最近在研究activemq的ack消息確認機制,在activemq與spring整合時遇到的了一個問題。JMS規范的ack消息確認機制有一下四種,定于在session對象中:AUTO_ACKNOWLEDGE = 1 :自動確認CLIENT_ACKNOWLEDGE = 2:客戶端手動確認 DU...

    LiuRhoRamen 評論0 收藏0
  • Spring boot 集成 ActiveMQ

    摘要:安裝到官方網站下載最新的的安裝包,并解壓到本地目錄下,下載鏈接如下。修改消費者使用配置消費者監聽的隊列,其中是接收到的消息收到的報文為接收到的消息重新執行 安裝ActiveMQ 到Apache官方網站下載最新的ActiveMQ的安裝包,并解壓到本地目錄下,下載鏈接如下:http://activemq.apache.org/do...。showImg(https://segmentfau...

    Donne 評論0 收藏0

發表評論

0條評論

NoraXie

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<