iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Software Development

Event driven architecture的奧妙系列 第 28

Day 28 Nats的補充包JetStream - 後篇

  • 分享至 

  • xImage
  •  

前言

我們昨天講了什麼是JetStream,以及它的特性,還有它克服CoreNATS的一些問題。同時也說明JetStream的stream。

今天我們接著講JetStream的另一個重要的功能 - Consumer。

好~讓我們開始吧!

NATS JetStream的特性

Consumer

在NATS JetStream 中,Consumer是接收處理訊息的重要功能。

https://ithelp.ithome.com.tw/upload/images/20241011/20169096QMX8oWhfYD.jpg

有別於pub-sub的subscriber被動接收來自NATS的訊息;Consumer提供push/pull兩種接收的方式提高開發團隊的效率。

  • push consumer:和subscriber的作用一樣,當stream收到來自publisher的訊息,stream會分送訊息給consumer (被動)
  • pull consumer:consumer主動跟stream要訊息,收到訊息做完相關操作之後會繼續跟stream要下一批的訊息 (主動)

不論是用哪一種方式接收訊息,當consumer處理完消息後,必須回覆Ack訊息給stream,告知它這筆訊息已經處理完成,可以從stream中刪除

這時候會有個疑問,如果consumer遲遲不回的話該怎麼處理?

在stream中有inspire time的設定,我們先說明什麼是inspire time。
Inspire time:

  • 訊息被儲存到stream到consumer處理訊息的時間間隔
  • consumer從stream中接收到訊息到處理完訊息的時間間隔

意思就是開發團隊可以在stream設定inspire time,若超過設定的inspire time,stream卻沒收到consumer發來的Ack,steam會認為consumer沒有接到訊息,會重新發一次。

Consumer的流程

  • 建立stream: 註冊consumer前,需要先建立一個strema,用在儲存訊息,並定義其屬性,像是保留時間、inspire time等。
  • 註冊consumer: 創建stream後,可以註冊consumer
  • 接收訓息: 根據開發團隊的設計來決定使用push/pull consumer
  • 處理訊息: 當consumer接到訓息,開始進行相關的操作
  • 回覆Ack: 當訊息處理完,consumer必須回覆Ack給stream,stream才能將該訊息進行清理
  • 錯誤處理和重試: 如果consumer處理訊息時出現錯誤或是根本沒收到,可以根據設定重送一發或是進行相應的錯誤處理

總結

NATS JetStream的consumer提供了非常靈活、高效的訊息處理方法,能夠支援各種分佈式系統的需求。通過訊息的持久化、push/pull consumer,JetStream能夠讓訊息的處理更加簡單和有效率。

好了~今天就到這邊!!


上一篇
Day 27 Nats的補充包JetStream - 前篇
下一篇
Day 29 - NATS JetStream面臨的挑戰
系列文
Event driven architecture的奧妙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言