高性能消息中間件——NATS

楚南公 2024-06-09 12:00 17次浏览 0 条评论 taohigo.com

在介紹NATS之前先瞭解下什麼是分佈式系統和消息中間件

對於分佈式系統的定義,一直以來我都沒有找到或者想到特別簡練而又合適的定義,這裡引用一下Distributed System Concepts and Design (Thrid Edition)中的一句話A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages,從這句話我們可以看到幾個重點,一是組件分佈在網絡計算機上,二是組件之間僅僅通過消息傳遞來通信並協調行動。消息中間件維基百科給出的定義為Message-oriented middleware(MOM) is software infrastructure focused on sending and receiving messages between distrubuted systems,意思就是面向消息的系統(消息中間件)是在分佈式系統中完成消息的發送和接收的基礎軟件

消息中間件常被提及的好處即異步和解耦,市面上常常被使用到的中間件有RabbitMQ, ActiveMQ, Kafka等,他們的關註度和使用率都非常的高,並且使用起來也非常的方便。公司的WiseCloud產品就集成瞭RabbitMQ。而在下一個版本的更新中將會使用NATS來替換RabbitMQ。使用NATS的好處比較多首先就是其性能非常好,下面引用官網的性能對比圖:

NATS介紹

NATS是一個開源、輕量級、高性能的分佈式消息中間件,實現瞭高可伸縮性和優雅的Publish/Subscribe模型,使用Golang語言開發。NATS的開發哲學認為高質量的QoS應該在客戶端構建,故隻建立瞭Request-Reply,不提供 1.持久化 2.事務處理 3.增強的交付模式 4.企業級隊列。

NATS消息傳遞模型

NATS支持各種消息傳遞模型,包括:

發佈訂閱(Publish Subscribe)

請求回復(Request Reply)

隊列訂閱(Queue Subscribers )

提供的功能:

純粹的發佈訂閱模型(Pure pub-sub)

服務器集群(Cluster mode server)

自動精簡訂閱者(Auto-pruning of subscribers)

基於文本協議(Text-based protocol)

多服務質量保證(Multiple qualities of service – QoS)

發佈訂閱(Publish Subscribe)

NATS將publish/subscribe消息分發模型實現為一對多通信,發佈者在Subject上發送消息,並且監聽該Subject在任何活動的訂閱者都會收到該消息

java:

//publish
Connection nc = Nats.connect("nats://127.0.0.1:4222");
nc.publish("subject", "hello world".getBytes(StandardCharsets.UTF_8));
//subscribe
Subscription sub = nc.subscribe("subject");
Message msg = sub.nextMessage(Duration.ofMillis(500));
String response = new String(msg.getData(), StandardCharsets.
UTF_8);