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

kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明

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

背景知識

JMS一個在 Java標準化組織(JCP)內(nèi)開發(fā)的標準(代號JSR 914)。2001年6月25日,Java消息服務發(fā)布JMS 1.0.2b,2002年3月18日Java消息服務發(fā)布 1.1.

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

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

1.JMS中定義

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

點對點

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

發(fā)布/訂閱

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

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

2.1 點對點模式

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

2.2 發(fā)布訂閱模式

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

小結(jié)

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

疑問

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

3.流行的消息隊列模型比較

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

3.1 RabbitMQ

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

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

RabbitMQ需要支持多訂閱時,發(fā)布者發(fā)送的消息通過路由同時寫到多個Queue,不同訂閱組消費此消息。 

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

3.2 Kafka

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

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

相關(guān)文章

  • Java8中List轉(zhuǎn)Map的多種方式代碼

    Java8中List轉(zhuǎn)Map的多種方式代碼

    這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)Map的多種方式,在實際項目中我們經(jīng)常會用到List轉(zhuǎn)Map操作,本文介紹了多種方法的實現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • Java兩種方式實現(xiàn)動態(tài)代理

    Java兩種方式實現(xiàn)動態(tài)代理

    Java 在 java.lang.reflect 包中有自己的代理支持,該類(Proxy.java)用于動態(tài)生成代理類,只需傳入目標接口、目標接口的類加載器以及 InvocationHandler 便可為目標接口生成代理類及代理對象。我們稱這個Java技術(shù)為:動態(tài)代理
    2020-10-10
  • Mybatis中mapper.xml實現(xiàn)熱加載介紹

    Mybatis中mapper.xml實現(xiàn)熱加載介紹

    大家好,本篇文章主要講的是Mybatis中mapper.xml實現(xiàn)熱加載介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Java實現(xiàn)上傳文件圖片到指定服務器目錄

    Java實現(xiàn)上傳文件圖片到指定服務器目錄

    本文通過實例代碼給大家介紹了java上傳文件圖片到指定服務器目錄的相關(guān)知識,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • JAVA中的延遲隊列DelayQueue應用解析

    JAVA中的延遲隊列DelayQueue應用解析

    這篇文章主要介紹了JAVA中的延遲隊列DelayQueue應用解析,DelayQueue是一個根據(jù)元素的到期時間來排序的隊列,而并非是一般的隊列那樣先進先出,最快過期的元素排在隊首,越晚到期的元素排得越后,需要的朋友可以參考下
    2023-12-12
  • Java excel數(shù)據(jù)導入mysql的實現(xiàn)示例詳解

    Java excel數(shù)據(jù)導入mysql的實現(xiàn)示例詳解

    今天教大家如何使用Java將excel數(shù)據(jù)導入MySQL,文中有非常詳細的代碼示例,對正在學習java的小伙伴呢很有幫助,需要的朋友可以參考下
    2022-08-08
  • Java中l(wèi)ist.foreach不能使用字符串拼接的問題

    Java中l(wèi)ist.foreach不能使用字符串拼接的問題

    這篇文章主要介紹了Java中l(wèi)ist.foreach不能使用字符串拼接的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatis-Plus實現(xiàn)分頁的方法使用詳解

    MyBatis-Plus實現(xiàn)分頁的方法使用詳解

    這篇文章主要為大家介紹了MyBatis-Plus的分頁的方法使用,包括:不傳參數(shù)時的默認結(jié)果、查詢不存在的數(shù)據(jù)、手動包裝page和自定義SQL,需要的可以參考一下
    2022-03-03
  • java 請求跨域問題解決方法實例詳解

    java 請求跨域問題解決方法實例詳解

    這篇文章主要介紹了java 請求跨域問題解決方法實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • SpringBoot常見錯誤圖文總結(jié)

    SpringBoot常見錯誤圖文總結(jié)

    最近在使用idea+Springboot開發(fā)項目中遇到一些問題,這篇文章主要給大家介紹了關(guān)于SpringBoot常見錯誤總結(jié)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論