Pulsar官方文檔 概念和架構(gòu)-Messaging Concepts中主要內(nèi)容
專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)奉新免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。1 消息組成
組成 | 說(shuō)明 |
---|---|
Value / data payload | 消息攜帶的數(shù)據(jù),所有pulsar的消息攜帶原始bytes,但是消息數(shù)據(jù)也需要遵循數(shù)據(jù)shcema |
Key | 消息可以被Key打標(biāo)簽。這可以對(duì)topic壓縮之類(lèi)的事情起作用 |
Properties | 用戶(hù)定義屬性的可選鍵/值映射 |
Producer name | 生成消息的生產(chǎn)者的名稱(chēng)(生產(chǎn)者自動(dòng)被賦予默認(rèn)名稱(chēng),但您也可以顯式地應(yīng)用自己的名稱(chēng)) |
Sequence ID | 每一個(gè)消息在其主題上都屬于一個(gè)有序序列。消息的序列ID是它在該序列中的順序 |
Publish time | 消息發(fā)布時(shí)的時(shí)間戳(由生產(chǎn)者自動(dòng)應(yīng)用) |
Event time | 一個(gè)可選的時(shí)間戳,應(yīng)用程序可以附加到消息上,表示某個(gè)事件發(fā)生的時(shí)間,例如消息被處理的時(shí)間。如果未顯式設(shè)置,則消息的事件時(shí)間為0。 |
2 生產(chǎn)者 發(fā)送模式
模式 | 說(shuō)明 |
---|---|
同步發(fā)送 | 生產(chǎn)者將在發(fā)送每個(gè)消息后等待代理的確認(rèn)。如果未收到確認(rèn),則生產(chǎn)者將認(rèn)為發(fā)送操作失敗 |
異步發(fā)送 | 生產(chǎn)者將把消息放入阻塞隊(duì)列并立即返回??蛻?hù)端庫(kù)隨后將消息發(fā)送到后臺(tái)的代理。如果隊(duì)列已滿(mǎn)(大大小可配置,則在調(diào)用API時(shí),生產(chǎn)者可能會(huì)被阻止或立即失敗,具體取決于傳遞給生產(chǎn)者的參數(shù) |
2.1 消息壓縮支持
LZ4
ZLIB
ZSTD
SNAPPY
2.2 支持批處理
如果啟用批處理,則生產(chǎn)者將在單個(gè)請(qǐng)求中累積并發(fā)送一批消息。批處理大小是由消息的大數(shù)量和大發(fā)布延遲定義的。
3 消費(fèi)者 接收模式
模式 | 說(shuō)明 |
---|---|
同步接收 | 同步接收將被阻止,直到有消息可用 |
異步接收 | 異步接收將立即返回一個(gè)future值,例如Java中的CompletableFuture,該值在新消息可用時(shí)完成 |
3.1 監(jiān)聽(tīng)
客戶(hù)端庫(kù)為用戶(hù)提供偵聽(tīng)器實(shí)現(xiàn)。例如,Java客戶(hù)機(jī)提供了一個(gè)MessageListener接口。在這個(gè)接口中,只要接收到新消息,就會(huì)調(diào)用received方法。
3.2 確認(rèn)
當(dāng)使用者成功使用消息時(shí),使用者會(huì)向代理發(fā)送確認(rèn)請(qǐng)求,以便代理丟棄該消息。否則,它將存儲(chǔ)消息。
消息可以逐個(gè)確認(rèn),也可以累積確認(rèn)。對(duì)于累積確認(rèn),消費(fèi)者只需要確認(rèn)它收到的最后一條消息。流中直至(包括)所提供消息的所有消息將不會(huì)重新傳遞給該使用者
( 累積確認(rèn)不能與共享訂閱模式一起使用,因?yàn)楣蚕砟J缴婕岸鄠€(gè)對(duì)同一訂閱具有訪(fǎng)問(wèn)權(quán)限的使用者)
在共享訂閱模式下,可以單獨(dú)確認(rèn)消息。
3.3 否定確認(rèn)
當(dāng)使用者一次未成功使用消息,并且希望再次使用該消息時(shí),使用者可以向代理發(fā)送否定的確認(rèn),然后代理將重新傳遞該消息。
消息可以被一個(gè)接一個(gè)地否定或累積地承認(rèn),這取決于消費(fèi)訂閱模式。
在獨(dú)占訂閱模式和故障轉(zhuǎn)移訂閱模式中,消費(fèi)者只會(huì)消極地確認(rèn)他們收到的最后一條消息。
在“共享”和“密鑰共享”訂閱模式中,您可以分別對(duì)消息進(jìn)行否定性確認(rèn)
3.4 確認(rèn)超時(shí)
當(dāng)消息未成功使用,并且您希望觸發(fā)代理自動(dòng)重新傳遞消息時(shí),可以采用未確認(rèn)消息自動(dòng)重新傳遞機(jī)制。客戶(hù)端將在整個(gè)確認(rèn)超時(shí)時(shí)間范圍內(nèi)跟蹤未確認(rèn)消息,并在指定確認(rèn)超時(shí)時(shí)自動(dòng)向代理發(fā)送重新傳遞未確認(rèn)消息請(qǐng)求
注意
在確認(rèn)超時(shí)之前使用否定確認(rèn)。否定確認(rèn)以更精確的方式控制單個(gè)消息的重新傳遞,并在消息處理時(shí)間超過(guò)確認(rèn)超時(shí)時(shí)避免無(wú)效的重新傳遞。
4 死信主題
在某些消息無(wú)法由消費(fèi)者使用時(shí),會(huì)成生新的消息。在這種機(jī)制中,無(wú)法使用的消息存儲(chǔ)在一個(gè)單獨(dú)的主題中,稱(chēng)為死信主題。您可以決定如何處理死信主題中的消息
下面的示例演示如何使用默認(rèn)的死信主題在Java客戶(hù)機(jī)中啟用死信主題
Consumer
.topic(topic)
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Shared)
.deadLetterPolicy(DeadLetterPolicy.builder()
.maxRedeliverCount(maxRedeliveryCount)
.build())
.subscribe();
默認(rèn)的死信主題使用以下格式:
如果要指定死信主題的名稱(chēng),請(qǐng)使用以下Java客戶(hù)端示例:
Consumer
.topic(topic)
.subscriptionName("my-subscription")
.subscriptionType(SubscriptionType.Shared)
.deadLetterPolicy(DeadLetterPolicy.builder()
.maxRedeliverCount(maxRedeliveryCount)
.deadLetterTopic("your-topic-name")
.build())
.subscribe();
死信主題取決于郵件的重新傳遞。由于確認(rèn)超時(shí)或否定確認(rèn),消息將重新傳遞。如果要對(duì)消息使用否定確認(rèn),請(qǐng)確保在確認(rèn)超時(shí)之前對(duì)其進(jìn)行否定確認(rèn)。
注意
目前,死信主題僅在共享訂閱模式下啟用
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。