什么是SimpleMessageListenerContainer和DirectMessageListenerContainer

這篇文章主要介紹“什么是SimpleMessageListenerContainer和DirectMessageListenerContainer”,在日常操作中,相信很多人在什么是SimpleMessageListenerContainer和DirectMessageListenerContainer問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是SimpleMessageListenerContainer和DirectMessageListenerContainer”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創新互聯公司主要從事網站建設、做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務東陽,十多年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18982081108

RabbitMQ 消費者代碼開發過程中會使用到 SimpleMessageListenerContainer 和 DirectMessageListenerContainer。
在版本2.0之前的版本中,只有一種MessageListenerContainer 即 SimpleMessageListenerContainer; 2.0之后有第二個容器—DirectMessageListenerContainer

一、SimpleMessageListenerContainer

默認情況下,偵聽器容器將啟動單個使用者,該使用者將從隊列接收消息。根據之前的文檔,我們知道有許多控制并發性的屬性。
最簡單的是concurrentConsumers,它只創建(固定的)將并發處理消息的使用者數量。
此外,還添加了一個新的屬性 maxConcurrentConsumers,容器將根據工作負載動態調整并發性。這與四個附加屬性一起工作:continutiveactivetrigger、startConsumerMinInterval、continutiveidletrigger、stopConsumerMinInterval。

1.1、在默認設置下,增加消費者的算法工作如下

如果尚未到達maxConcurrentConsumers,并且已有的使用者連續10個周期處于活動狀態,并且自上一個使用者啟動以來至少已經過了10秒,那么將啟動一個新的使用者。如果使用者在txSize *中接收到至少一條消息,則認為該使用者處于活動狀態。

1.2、在默認設置下,減少消費者的算法工作如下

如果有多個concurrentConsumers正在運行,并且某個consumer檢測到10個連續超時(空閑),并且上一個consumer至少在60秒之前停止,那么該consumer將停止。超時取決于receiveTimeout和txSize屬性。如果使用者在txSize *中沒有接收到任何消息,則認為它是空閑的。因此,在默認超時(1秒)和txSize為4的情況下,在40秒的空閑時間(4個超時對應1個空閑檢測)之后將考慮停止使用者。

1.3、配置如下
@Bean
public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(ConnectionFactory connectionFactory){
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    //初始化消費者數量
    factory.setConcurrentConsumers(this.concurrentConsumers);
    //最大消費者數量
    factory.setMaxConcurrentConsumers(this.maxConcurrentConsumers);
    //手動確認消息
    factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
    factory.setErrorHandler(rabbitErrorHandler);
    return factory;
}

二、DirectMessageListenerContainer

使用 DirectMessageListenerContainer,您需要確保 ConnectionFactory 配置了一個任務執行器,該執行器在使用該 ConnectionFactory 的所有偵聽器容器中具有足夠的線程來支持所需的并發性。默認連接池大小僅為5。
并發性基于配置的隊列和consumersPerQueue。每個隊列的每個使用者使用一個單獨的通道,并發性由rabbit客戶端庫控制;默認情況下,它使用5個線程池;您可以配置taskExecutor來提供所需的最大并發性。

2.1、配置如下
@Bean
public DirectRabbitListenerContainerFactory directRabbitListenerContainerFactory(ConnectionFactory connectionFactory){
    DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    //每個隊列的消費者數量
    factory.setConsumersPerQueue(this.consumersPerQueue);
    //手動確認消息
    factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
    factory.setErrorHandler(rabbitErrorHandler);
    return factory;
}

三、服務對比

SimpleMessageListenerContainer提供了以下特性,但DirectMessageListenerContainer不提供:

  1. txSize—使用SimpleMessageListenerContainer,您可以將其設置為控制事務中傳遞的消息數量和/或減少ack的數量,但這可能會導致失敗后重復傳遞的數量增加。(與txSize和SimpleMessageListenerContainer一樣,DirectMessageListenerContainer也有mesagesPerAck,可以用來減少ack,但不能用于事務—每個消息都在單獨的事務中交付和打包)。

  2. maxconcurrentconsumer和consumer伸縮間隔/觸發器—DirectMessageListenerContainer中沒有自動伸縮;但是,它允許您以編程方式更改consumersPerQueue屬性,并相應地調整使用者。

然而,與SimpleMessageListenerContainer相比,DirectMessageListenerContainer有以下優點:

  1. 在運行時添加和刪除隊列更有效;使用SimpleMessageListenerContainer,整個使用者線程重新啟動(所有使用者取消并重新創建);對于DirectMessageListenerContainer,不受影響的使用者不會被取消。

  2. 避免了RabbitMQ客戶機線程和使用者線程之間的上下文切換。

  3. 線程是跨使用者共享的,而不是為SimpleMessageListenerContainer中的每個使用者都有一個專用線程。

到此,關于“什么是SimpleMessageListenerContainer和DirectMessageListenerContainer”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!

當前名稱:什么是SimpleMessageListenerContainer和DirectMessageListenerContainer
轉載來于:http://m.kartarina.com/article10/pihido.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化、品牌網站設計、標簽優化域名注冊營銷型網站建設、外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設
主站蜘蛛池模板: 精品人妻无码专区中文字幕| 黄A无码片内射无码视频| 亚洲AV永久无码精品一区二区国产 | 一本久道中文无码字幕av| 国产色无码专区在线观看| 无码久久精品国产亚洲Av影片| 91嫩草国产在线无码观看| 人妻中文无码久热丝袜| 啊灬啊别停灬用力啊无码视频| 国产AV无码专区亚汌A√| 国产午夜无码片在线观看影院| 免费无码又爽又刺激高潮视频| 中文字幕无码视频专区| 亚洲AV无码专区亚洲AV桃| 亚洲av无码一区二区乱子伦as| 成人无码区免费A∨直播| 在线观看无码的免费网站| 亚洲色在线无码国产精品不卡 | 久久亚洲AV成人无码国产| 成在人线av无码免费高潮喷水| 成人免费无码大片A毛片抽搐色欲| 99精品人妻无码专区在线视频区| 亚洲熟妇无码八AV在线播放| 午夜成人无码福利免费视频| 久久久无码精品午夜| 无码人妻一区二区三区一| 午夜不卡无码中文字幕影院| 亚洲AV无码乱码国产麻豆穿越| 97无码人妻福利免费公开在线视频 | MM1313亚洲精品无码久久| 人妻丰满av无码中文字幕| 色综合久久中文字幕无码| 国产∨亚洲V天堂无码久久久| 亚洲AV无码乱码国产麻豆| 亚洲国产精品无码久久一线| 无码专区天天躁天天躁在线| 人妻无码视频一区二区三区| 中日韩精品无码一区二区三区| 亚洲AV无码资源在线观看| 深夜a级毛片免费无码| 亚洲精品无码久久久久AV麻豆|