欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot管理RabbitMQ中的Channel詳解

 更新時(shí)間:2023年08月29日 08:44:50   作者:Abstracted  
這篇文章主要介紹了SpringBoot管理RabbitMQ中的Channel詳解,channel僅存在于connection的上下文中,而不會(huì)單獨(dú)存在,當(dāng)channel關(guān)閉時(shí),其上的所有channel也會(huì)關(guān)閉,需要的朋友可以參考下

Channel是什么

RabbitMQ是AMQP0-9-1協(xié)議的實(shí)現(xiàn),先來(lái)看看AMQP0-9-1協(xié)議中對(duì)通道Channel的闡述。

有些應(yīng)用程序需要與broker建立多個(gè)連接。但是,保持多個(gè)TCP連接同時(shí)打開(kāi)是不可取的,因?yàn)檫@樣做會(huì)消耗系統(tǒng)資源,使配置防火墻更加困難。AMQP0-9-1的Connection可以多路復(fù)用,Channel可以被認(rèn)為是“共享一個(gè)TCP連接的輕量級(jí)連接”。

客戶端執(zhí)行的每個(gè)協(xié)議操作都發(fā)生在一個(gè)channel上。在特定channel上的通信與在另一個(gè)channel上的通信完全獨(dú)立,因此每個(gè)協(xié)議方法也都帶有信道ID(a.k.a)。一個(gè)整數(shù),代理和客戶端都使用它來(lái)確定該方法用于哪個(gè)通道。

channel僅存在于connection的上下文中,而不會(huì)單獨(dú)存在。當(dāng)channel關(guān)閉時(shí),其上的所有channel也會(huì)關(guān)閉。

對(duì)于使用多個(gè)線程/進(jìn)程進(jìn)行處理的應(yīng)用程序,為每個(gè)線程/進(jìn)程打開(kāi)一個(gè)新channel而不在它們之間共享channel是很常見(jiàn)的。

在普通的JAVAEE項(xiàng)目中,經(jīng)常采用1個(gè)進(jìn)程-1個(gè)connection-1個(gè)channel。

但是這在JAVAWEB場(chǎng)景中實(shí)不可取的。

一個(gè)web項(xiàng)目?jī)H有1個(gè)進(jìn)程,會(huì)有非常多的線程,每個(gè)線程都創(chuàng)建一個(gè)connection是不可取的。

在AMQP-0-9-1協(xié)議中推薦了使用每個(gè)線程使用一個(gè)獨(dú)立的channel,這樣不同線程之間的channel相互獨(dú)立,并且公用同一個(gè)connection。

但是問(wèn)題又來(lái)了,在并發(fā)情況下,web場(chǎng)景下,用戶的每一次http請(qǐng)求都是一個(gè)線程,難道這樣的每一個(gè)http請(qǐng)求都要對(duì)應(yīng)創(chuàng)建一個(gè)channel嗎?

Spring在集成RabbitMQ時(shí)對(duì)這個(gè)問(wèn)題有了非常好的解決。

Spring如何管理Channel?

springboot使用了RabbitMQ中的IO多路復(fù)用的理念,并對(duì)這種方案在web場(chǎng)景下進(jìn)行了優(yōu)化,盡可能的復(fù)用空閑中的channel。

boot默認(rèn)使用 CachingConnectionFactory 對(duì) Connection 和空閑 Channel 進(jìn)行緩存。

看看Spring中的RabbitMQ是如何工作的:

Spring中對(duì)RabbitMQ的消息操作都是通過(guò)一個(gè)Template模板對(duì)象 RabbitTemplate ,該對(duì)象中封裝了對(duì)消息的接受和發(fā)送的各種重載方法。

消息的send都需要調(diào)用一個(gè)核心私有方法 doExcute() 。

在這里插入圖片描述

管理RabbitMQ中的事務(wù)Channel

Spring也是通過(guò) TransactionSupport 進(jìn)行管理RabbitMQ中的事務(wù)Channel。

這一點(diǎn)和MyBatis的 SqlSessionTemplate 管理開(kāi)啟事務(wù)的 SqlSession 的步驟相同。

這里不多贅述如果管理事務(wù)的channel

1.當(dāng)?shù)谝淮斡姓?qǐng)求連接rabbitmq時(shí),spring創(chuàng)建一個(gè)AMQP的connection,并使用CachingConnectionFactory將其封裝并緩存起來(lái)。

在這里插入圖片描述

2.然后使用這個(gè)connection,創(chuàng)建channel,當(dāng)channel的任務(wù)執(zhí)行完成后(也就是邏輯close時(shí),并非真正的關(guān)閉了channel,而是在內(nèi)存中給channel創(chuàng)建了一個(gè)標(biāo)記。)

則使用 CachingConnectionFactory 的靜態(tài)子類 ChannelConnectionFactoryProxy 把這個(gè)channel緩存到一個(gè)空閑列表中。開(kāi)啟了事務(wù)的channel存放在不同的列表中。

在這里插入圖片描述

3.其他線程執(zhí)行任務(wù)時(shí),CachingConnectionFactory中獲取connection,然后創(chuàng)建channel時(shí),會(huì)去ChannelConnectionFactoryProxy的空閑列表中尋找哪些channel是open狀態(tài)。

然后將尋找到的一個(gè)channel移出列表,并使用這個(gè)channel執(zhí)行任務(wù)。(取出緩存中的channel這一過(guò)程是同步代碼塊, 開(kāi)啟了事務(wù)的channel存放在不同的列表中。)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

4.任務(wù)執(zhí)行完畢,將channel在緩存入空閑列表中。默認(rèn)最多緩存25個(gè)channel

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于SpringBoot管理RabbitMQ中的Channel詳解的文章就介紹到這了,更多相關(guān)SpringBoot管理Channel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java注解的Retention和RetentionPolicy實(shí)例分析

    Java注解的Retention和RetentionPolicy實(shí)例分析

    這篇文章主要介紹了Java注解的Retention和RetentionPolicy,結(jié)合實(shí)例形式分析了Java注解Retention和RetentionPolicy的基本功能及使用方法,需要的朋友可以參考下
    2019-09-09
  • Java中List排序的3種常見(jiàn)方法總結(jié)

    Java中List排序的3種常見(jiàn)方法總結(jié)

    在Java編程中List對(duì)象的排序是一個(gè)常見(jiàn)的需求,List接口提供了多種排序方法,這篇文章主要給大家介紹了關(guān)于Java中List排序的3種常見(jiàn)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • java對(duì)接支付寶支付接口簡(jiǎn)單步驟記錄

    java對(duì)接支付寶支付接口簡(jiǎn)單步驟記錄

    最近項(xiàng)目APP需要接入微信、支付寶支付功能,在分配開(kāi)發(fā)任務(wù)時(shí),聽(tīng)說(shuō)微信支付接口比支付寶支付接口要難實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于java對(duì)接支付寶支付接口的簡(jiǎn)單步驟,需要的朋友可以參考下
    2024-05-05
  • java連接Access數(shù)據(jù)庫(kù)的方法

    java連接Access數(shù)據(jù)庫(kù)的方法

    這篇文章主要為大家詳細(xì)介紹了java連接Access數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 使用Java實(shí)現(xiàn)解析Excel公式

    使用Java實(shí)現(xiàn)解析Excel公式

    在日常工作中,我們經(jīng)常需要在Excel中使用公式對(duì)表中數(shù)據(jù)進(jìn)行計(jì)算和分析,所以本文小編主要來(lái)和大家介紹一下如何在Java中實(shí)現(xiàn)解析Excel公式,感興趣的可以了解下
    2024-02-02
  • 關(guān)于spring boot整合kafka+注解方式

    關(guān)于spring boot整合kafka+注解方式

    這篇文章主要介紹了關(guān)于spring boot整合kafka+注解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 每日六道java新手入門面試題,通往自由的道路第二天

    每日六道java新手入門面試題,通往自由的道路第二天

    這篇文章主要為大家分享了最有價(jià)值的6道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下
    2021-06-06
  • java使用Jco連接SAP過(guò)程

    java使用Jco連接SAP過(guò)程

    這篇文章主要介紹了java使用Jco連接SAP過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)

    SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)

    從SpringBoot 2.7.x升級(jí)到3.3涉及多個(gè)重要變更,特別是因?yàn)?nbsp;Spring Boot 3.x 系列基于 Jakarta EE 9,而不再使用 Java EE,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • spring?@Transactional注解中常用參數(shù)詳解

    spring?@Transactional注解中常用參數(shù)詳解

    這篇文章主要介紹了spring?@Transactional注解中常用參數(shù)詳解,事物注解方式:?@Transactional,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02

最新評(píng)論