在介紹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);
-
扫码下载安卓APP
-
微信扫一扫关注我们微信扫一扫打开小程序手Q扫一扫打开小程序
-
返回顶部