最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

kafka?消息隊(duì)列中點(diǎn)對(duì)點(diǎn)與發(fā)布訂閱的區(qū)別說(shuō)明

 更新時(shí)間:2022年05月05日 11:33:14   作者:幽靈之使  
這篇文章主要介紹了kafka?消息隊(duì)列中點(diǎn)對(duì)點(diǎn)與發(fā)布訂閱的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

背景知識(shí)

JMS一個(gè)在 Java標(biāo)準(zhǔn)化組織(JCP)內(nèi)開(kāi)發(fā)的標(biāo)準(zhǔn)(代號(hào)JSR 914)。2001年6月25日,Java消息服務(wù)發(fā)布JMS 1.0.2b,2002年3月18日J(rèn)ava消息服務(wù)發(fā)布 1.1.

Java消息服務(wù)(Java Message Service,JMS)應(yīng)用程序接口是一個(gè)Java平臺(tái)中關(guān)于面向消息中間件(MOM)的API,用于在兩個(gè)應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。 

點(diǎn)對(duì)點(diǎn)發(fā)布訂閱最初是由JMS定義的。這兩種模式主要區(qū)別或解決的問(wèn)題就是發(fā)送到隊(duì)列的消息能否重復(fù)消費(fèi)(多訂閱)

1.JMS中定義

JMS規(guī)范目前支持兩種消息模型:點(diǎn)對(duì)點(diǎn)(point to point, queue)和發(fā)布/訂閱(publish/subscribe,topic)。 

點(diǎn)對(duì)點(diǎn)

  • 消息生產(chǎn)者生產(chǎn)消息發(fā)送到queue中,然后消息消費(fèi)者從queue中取出并且消費(fèi)消息。這里要注意:
  • 消息被消費(fèi)以后,queue中不再有存儲(chǔ),所以消息消費(fèi)者不可能消費(fèi)到已經(jīng)被消費(fèi)的消息。
  • Queue支持存在多個(gè)消費(fèi)者,但是對(duì)一個(gè)消息而言,只會(huì)有一個(gè)消費(fèi)者可以消費(fèi)。 

發(fā)布/訂閱

  • 消息生產(chǎn)者(發(fā)布)將消息發(fā)布到topic中,同時(shí)有多個(gè)消息消費(fèi)者(訂閱)消費(fèi)該消息。
  • 和點(diǎn)對(duì)點(diǎn)方式不同,發(fā)布到topic的消息會(huì)被所有訂閱者消費(fèi)。

2.二者分析與區(qū)別

2.1 點(diǎn)對(duì)點(diǎn)模式

生產(chǎn)者發(fā)送一條消息到queue,只有一個(gè)消費(fèi)者能收到。

2.2 發(fā)布訂閱模式

發(fā)布者發(fā)送到topic的消息,只有訂閱了topic的訂閱者才會(huì)收到消息。

小結(jié)

  • queue實(shí)現(xiàn)了負(fù)載均衡,一個(gè)消息只能被一個(gè)消費(fèi)者接受,當(dāng)沒(méi)有消費(fèi)者可用時(shí),這個(gè)消息會(huì)被保存直到有 一個(gè)可用的消費(fèi)者,一個(gè)queue可以有很多消費(fèi)者,他們之間實(shí)現(xiàn)了負(fù)載均衡,所以Queue實(shí)現(xiàn)了一個(gè)可靠的負(fù)載均衡。
  • topic實(shí)現(xiàn)了發(fā)布和訂閱,當(dāng)你發(fā)布一個(gè)消息,所有訂閱這個(gè)topic的服務(wù)都能得到這個(gè)消息,所以從1到N個(gè)訂閱者都能得到一個(gè)消息的拷貝,只有在消息代理收到消息時(shí)有一個(gè)有效訂閱時(shí)的訂閱者才能得到這個(gè)消息的拷貝。

疑問(wèn)

  • 發(fā)布訂閱模式下,能否實(shí)現(xiàn)訂閱者負(fù)載均衡消費(fèi)呢?當(dāng)發(fā)布者消息量很大時(shí),顯然單個(gè)訂閱者的處理能力是不足的。實(shí)際上現(xiàn)實(shí)場(chǎng)景中是多個(gè)訂閱者節(jié)點(diǎn)組成一個(gè)訂閱組負(fù)載均衡消費(fèi)topic消息,即分組訂閱(如下圖所示),這樣訂閱者很容易實(shí)現(xiàn)消費(fèi)能力線(xiàn)性擴(kuò)展。

3.流行的消息隊(duì)列模型比較

傳統(tǒng)企業(yè)型消息隊(duì)列ActiveMQ遵循了JMS規(guī)范,實(shí)現(xiàn)了點(diǎn)對(duì)點(diǎn)發(fā)布訂閱模型,但其他流行的消息隊(duì)列RabbitMQ、Kafka并沒(méi)有遵循老態(tài)龍鐘的JMS規(guī)范,是通過(guò)什么方式實(shí)現(xiàn)消費(fèi)負(fù)載均衡、多訂閱呢?

3.1 RabbitMQ

RabbitMQ實(shí)現(xiàn)了AQMP協(xié)議,AQMP協(xié)議定義了消息路由規(guī)則和方式。生產(chǎn)端通過(guò)路由規(guī)則發(fā)送消息到不同queue,消費(fèi)端根據(jù)queue名稱(chēng)消費(fèi)消息。此外RabbitMQ是向消費(fèi)端推送消息,訂閱關(guān)系消費(fèi)狀態(tài)保存在服務(wù)端。

生產(chǎn)端發(fā)送一條消息通過(guò)路由投遞到Queue,只有一個(gè)消費(fèi)者能消費(fèi)到。

當(dāng)RabbitMQ需要支持多訂閱時(shí),發(fā)布者發(fā)送的消息通過(guò)路由同時(shí)寫(xiě)到多個(gè)Queue,不同訂閱組消費(fèi)此消息。 

RabbitMQ既支持內(nèi)存隊(duì)列也支持持久化隊(duì)列,消費(fèi)端為推(push)模型,消費(fèi)狀態(tài)和訂閱關(guān)系由服務(wù)端負(fù)責(zé)維護(hù),消息消費(fèi)完后立即刪除,不保留歷史消息。所以支持多訂閱時(shí),消息會(huì)多個(gè)拷貝。

3.2 Kafka

Kafka只支持消息持久化,消費(fèi)端為拉(pull)模型,消費(fèi)狀態(tài)和訂閱關(guān)系由客戶(hù)端端負(fù)責(zé)維護(hù),消息消費(fèi)完后不會(huì)立即刪除,會(huì)保留歷史消息。因此支持多訂閱時(shí),消息只會(huì)存儲(chǔ)一份就可以了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)通過(guò)時(shí)間獲取8位驗(yàn)證碼

    Java實(shí)現(xiàn)通過(guò)時(shí)間獲取8位驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了Java如何通過(guò)時(shí)間獲取8位驗(yàn)證碼(每?jī)蓚€(gè)小時(shí)生成一個(gè)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 如何使用IDEA 搭建 SpringCloud 項(xiàng)目

    如何使用IDEA 搭建 SpringCloud 項(xiàng)目

    所謂微服務(wù),就是要把整個(gè)業(yè)務(wù)模塊拆分成多個(gè)各司其職的小模塊,做到單一職責(zé)原則,不會(huì)重復(fù)開(kāi)發(fā)相同的業(yè)務(wù)代碼,實(shí)現(xiàn)真正意義上的高內(nèi)聚、低耦合,這篇文章主要介紹了如何使用IDEA 搭建 SpringCloud 項(xiàng)目,需要的朋友可以參考下
    2023-11-11
  • 一步步教你把SpringBoot項(xiàng)目打包成Docker鏡像

    一步步教你把SpringBoot項(xiàng)目打包成Docker鏡像

    Docker可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴(lài)包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打包成Docker鏡像的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 一篇文章帶你了解Maven的坐標(biāo)概念以及依賴(lài)管理

    一篇文章帶你了解Maven的坐標(biāo)概念以及依賴(lài)管理

    這篇文章主要為大家介紹了Maven的坐標(biāo)概念以及依賴(lài)管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Spring Boot jar中沒(méi)有主清單屬性的解決方法

    Spring Boot jar中沒(méi)有主清單屬性的解決方法

    這篇文章主要介紹了Spring Boot jar中沒(méi)有主清單屬性的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • springboot循環(huán)依賴(lài)問(wèn)題案例代碼及解決辦法

    springboot循環(huán)依賴(lài)問(wèn)題案例代碼及解決辦法

    在 Spring Boot 中,如果兩個(gè)或多個(gè) Bean之間存在循環(huán)依賴(lài)(即 Bean A 依賴(lài) Bean B,而 Bean B 又依賴(lài) Bean A),會(huì)導(dǎo)致 Spring 的依賴(lài)注入機(jī)制無(wú)法正確處理,從而拋出異常,下面給大家介紹springboot循環(huán)依賴(lài)問(wèn)題及其解決辦法,感興趣的朋友一起看看吧
    2025-04-04
  • spring mvc 和ajax異步交互完整實(shí)例代碼

    spring mvc 和ajax異步交互完整實(shí)例代碼

    本篇文章主要介紹了spring mvc 和ajax異步交互完整實(shí)例代碼,簡(jiǎn)單的AJAX+SpringMVC的異步交互小例子,有興趣的可以了解一下。
    2017-02-02
  • java中Date和Timestamp類(lèi)型的相互轉(zhuǎn)換方式

    java中Date和Timestamp類(lèi)型的相互轉(zhuǎn)換方式

    這篇文章主要介紹了java中Date和Timestamp類(lèi)型的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot中Dependency not found解決方案

    Springboot中Dependency not found解決方案

    本文主要介紹了Springboot中Dependency not found解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析

    Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Springmvc ViewResolver設(shè)計(jì)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

山东省| 三亚市| 阜阳市| 衡山县| 易门县| 图木舒克市| 安岳县| 隆昌县| 泗水县| 峡江县| 吴桥县| 古浪县| 行唐县| 布尔津县| 民丰县| 云南省| 黄浦区| 宜州市| 仪征市| 彝良县| 吉隆县| 类乌齐县| 绥滨县| 湘潭县| 湖北省| 桦南县| 新干县| 大田县| 土默特左旗| 吴川市| 平武县| 汶上县| 云林县| 滦南县| 越西县| 卢氏县| 南投市| 嘉定区| 瓮安县| 余江县| 万盛区|