日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java amqp_AMQP协议

發(fā)布時(shí)間:2024/4/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java amqp_AMQP协议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)前各種應(yīng)用大量使用異步消息模型,并隨之產(chǎn)生眾多消息中間件產(chǎn)品及協(xié)議,標(biāo)準(zhǔn)的不一致使應(yīng)用與中間件之間的耦合限制產(chǎn)品的選擇,并增加維護(hù)成本。AMQP是一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同開發(fā)語言等條件的限制。

當(dāng)然這種降低耦合的機(jī)制是基于與上層產(chǎn)品,語言無關(guān)的協(xié)議。AMQP協(xié)議是一種二進(jìn)制協(xié)議,提供客戶端應(yīng)用與消息中間件之間異步、安全、高效地交互。從整體來看,AMQP協(xié)議可劃分為三層:

這種分層架構(gòu)類似于OSI網(wǎng)絡(luò)協(xié)議,可替換各層實(shí)現(xiàn)而不影響與其它層的交互。AMQP定義了合適的服務(wù)器端域模型,用于規(guī)范服務(wù)器的行為(AMQP服務(wù)器端可稱為broker)。在這里Model層決定這些基本域模型所產(chǎn)生的行為,這種行為在AMQP中用”command”表示,在后文中會(huì)著重來分析這些域模型。Session層定義客戶端與broker之間的通信(通信雙方都是一個(gè)peer,可互稱做partner),為command的可靠傳輸提供保障。Transport層專注于數(shù)據(jù)傳送,并與Session保持交互,接受上層的數(shù)據(jù),組裝成二進(jìn)制流,傳送到receiver后再解析數(shù)據(jù),交付給Session層。Session層需要Transport層完成網(wǎng)絡(luò)異常情況的匯報(bào),順序傳送command等工作。

上面是對(duì)AMQP協(xié)議的大致說明。下面會(huì)以我們對(duì)消息服務(wù)的需求來理解AMQP所提供的域模型。消息中間件的主要功能是消息的路由(Routing)和緩存(Buffering)。在AMQP中提供類似功能的兩種域模型:Exchange 和 Message queue。

Exchange接收消息生產(chǎn)者(Message Producer)發(fā)送的消息根據(jù)不同的路由算法將消息發(fā)送往Message queue。Message queue會(huì)在消息不能被正常消費(fèi)時(shí)緩存這些消息,具體的緩存策略由實(shí)現(xiàn)者決定,當(dāng)message queue與消息消費(fèi)者(Message consumer)之間的連接通暢時(shí),Message queue有將消息轉(zhuǎn)發(fā)到consumer的責(zé)任。

Message是當(dāng)前模型中所操縱的基本單位,它由Producer產(chǎn)生,經(jīng)過Broker被Consumer所消費(fèi)。它的基本結(jié)構(gòu)有兩部分: Header和Body。Header是由Producer添加上的各種屬性的集合,這些屬性有控制Message是否可被緩存,接收的queue是哪個(gè),優(yōu)先級(jí)是多少等。Body是真正需要傳送的數(shù)據(jù),它是對(duì)Broker不可見的二進(jìn)制數(shù)據(jù)流,在傳輸過程中不應(yīng)該受到影響。

一個(gè)broker中會(huì)存在多個(gè)Message queue,Exchange怎樣知道它要把消息發(fā)送到哪個(gè)Message queue中去呢? 這就是上圖中所展示Binding的作用。Message queue的創(chuàng)建是由client application控制的,在創(chuàng)建Message queue后需要確定它來接收并保存哪個(gè)Exchange路由的結(jié)果。Binding是用來關(guān)聯(lián)Exchange與Message queue的域模型。Client application控制Exchange與某個(gè)特定Message queue關(guān)聯(lián),并將這個(gè)queue接受哪種消息的條件綁定到Exchange,這個(gè)條件也叫Binding key或是 Criteria。

在與多個(gè)Message queue關(guān)聯(lián)后,Exchange中就會(huì)存在一個(gè)路由表,這個(gè)表中存儲(chǔ)著每個(gè)Message queue所需要消息的限制條件。Exchange就會(huì)檢查它接受到的每個(gè)Message的Header及Body信息,來決定將Message路由到哪個(gè)queue中去。Message的Header中應(yīng)該有個(gè)屬性叫Routing Key,它由Message發(fā)送者產(chǎn)生,提供給Exchange路由這條Message的標(biāo)準(zhǔn)。Exchange根據(jù)不同路由算法有不同有Exchange Type。比如有Direct類似,需要Binding key等于Routing key;也有Binding key與Routing key符合一個(gè)模式關(guān)系;也有根據(jù)Message包含的某些屬性來判斷。一些基礎(chǔ)的路由算法由AMQP所提供,client application也可以自定義各種自己的擴(kuò)展路由算法。那么一個(gè)Message的處理流程類似于這樣:

在這里有個(gè)新名詞需要介紹: Virtual Host。一個(gè)Virtual Host可持有一些Exchange和Message queue。它是一個(gè)虛擬概念,一個(gè)Virtual Host可以是一臺(tái)服務(wù)器,也可以是由多臺(tái)服務(wù)器組成的集群。同步擴(kuò)展下,Exchange與Message queue的部署也可以是一臺(tái)或是多臺(tái)服務(wù)器上。

Message的產(chǎn)生者和消費(fèi)者可能是同一個(gè)應(yīng)用。整個(gè)AMQP定義的就是Client application與Broker之間的交互。在粗略介紹完AMQP的域模型后,可以關(guān)注下Client是怎樣與Broker建立起連接的。

在AMQP中,Client application想要與Broker溝通,就需要建立起與Broker的connection,這種connection其實(shí)是與Virtual Host相關(guān)聯(lián)的,也就是說,connection是建立在client與Virtual Host之間。可以在一個(gè)connection上并發(fā)運(yùn)行多個(gè)channel,每個(gè)channel執(zhí)行與Broker的通信,我們前面提供的session就是依附于channel上的。

這里的Session可以有多種定義,既可以表示AMQP內(nèi)部提供的command分發(fā)機(jī)制,也可以說是在宏觀上區(qū)別與域模型的接口。正常理解就是我們平時(shí)所說的交互context,主要作用就是在網(wǎng)絡(luò)上可靠地傳遞每一個(gè)command。在AMQP的設(shè)計(jì)中,應(yīng)當(dāng)是借鑒了TCP的各種設(shè)計(jì),用于保證這種可靠性。

在Session層,為上層所需要交互的每個(gè)command分配一個(gè)惟一標(biāo)識(shí)符(可以是一個(gè)UUID),是為了在傳輸過程中可以對(duì)command做校驗(yàn)和重傳。Command發(fā)送端也需要記錄每個(gè)發(fā)送出去的command到Replay Buffer,以期得到接收方的回饋,保證這個(gè)command被接收方明確地接收或是已執(zhí)行這個(gè)command。對(duì)于超時(shí)沒有收到反饋的command,發(fā)送方再次重傳。如果接收方已明確地回饋信息想要告知command發(fā)送方但這條信息在中途丟失或是其它問題發(fā)送方?jīng)]有收到,那么發(fā)送方不斷重傳會(huì)對(duì)接收方產(chǎn)生影響,為了降低這種影響,command接收方設(shè)置一個(gè)過濾器Idempotency Barrier,來攔截那些已接收過的command。?關(guān)于這種重傳及確認(rèn)機(jī)制,可以參考下TCP的相關(guān)設(shè)計(jì)。

上面大致介紹了AMQP的域模型及連接機(jī)制中的確認(rèn)及重傳模型,不涉及AMQP的詳細(xì)二進(jìn)制規(guī)范。

總結(jié)

以上是生活随笔為你收集整理的java amqp_AMQP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: caoprom超碰 | 色婷婷在线视频 | 免费观看nba乐趣影院 | 久草久| 欧美性插动态图 | 成人动漫亚洲 | 一区二区亚洲精品 | 超碰在线观看91 | 亚洲做受高潮 | 枫花恋在线观看 | av网站在线观看免费 | 欧美一级看片 | 久久久久久av无码免费网站下载 | 成年人免费观看网站 | 国产真人无码作爱视频免费 | 影音先锋毛片 | 亚洲一级片 | 亚洲精品久久久久久久蜜桃 | 国产午夜精品一区二区三区视频 | 老熟妇高潮一区二区高清视频 | 人妻少妇无码精品视频区 | 亚洲一级黄色 | 91精选| 国产精品久久久久久久久久东京 | 97人人干| 少妇偷人精品无码人妻 | 亚洲欧美日本在线观看 | 国产在线h | 国产女无套免费视频 | 中文字幕国产 | 手机在线观看av片 | 国产精品伦一区二区三区 | 国产伦精品一区二区三区视频我 | 亚洲aaaaa特级 | 免费观看亚洲视频 | 久久影视 | 亚洲91网 | 极品少妇xxxx精品少妇偷拍 | 九九三级| 亚洲av无码一区二区三区网址 | 亚洲国产网址 | 日本特黄色片 | 红桃视频网站 | av色站 | 青青导航 | 天天综合入口 | 啪啪中文字幕 | 办公室荡乳欲伦交换bd电影 | 国产一级视频免费观看 | 国产在线成人精品午夜 | 国产又色又爽又黄又免费 | 亚洲黄网在线观看 | 2018天天干天天操 | 国产精品自拍电影 | 欧美精品一级二级 | 亚洲乱码av | 色欲国产精品一区二区 | 欧美色xxxxx 日本精品一区二区三区四区的功能 | 爱情岛论坛亚洲品质自拍视频 | 黄色免费看视频 | 国产又色又爽无遮挡免费 | 日韩毛片一级 | 日韩性生交大片免费看 | 国产又黄又粗的视频 | 亚洲国产精品成人无码区 | 国产福利视频导航 | 亚洲剧情av | 男人猛吃奶女人爽视频 | 小辣椒导航 | 中国女人裸体乱淫 | 国语对白一区 | 性大毛片视频 | 色九九| 国产精品福利在线播放 | 精品国产视频一区二区三区 | 超碰极品 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线 日本 制服 中文 欧美 | 91在线播放视频 | 毛片视频网站在线观看 | xxx黄色片 | 精品视频一区在线观看 | 日本呦呦 | 亚洲黄在线观看 | 黄色精彩视频 | 24小时日本在线www免费的 | 天天操天天操天天操天天操 | 成人激情视频在线播放 | 男人天堂一区 | 日韩视频一区二区在线观看 | 欧美激情成人在线 | 欧美在线黄色 | 在线免费观看日韩av | av免费网页 | 中文字幕乱码无码人妻系列蜜桃 | 一级黄色大毛片 | 亚洲乱码久久 | 小小姑娘电影大全免费播放 | 欧美最顶级a∨艳星 |