前提:
nats的所使用的编程语言是go.
所以在学习nats源码时候,需要有一定的go语言基础,可以看懂基本代码.了解go语言中特性,所谓的特性就是go所拥有的语法在其他编程语言中找不到,但是在go的编程中扮演不可替换角色.
一、nats是什么?
定位:高性能的消息中间件.
定义:NATS是一个开源、轻量级、高性能的分布式消息中间件,实现了高可伸缩性和优雅的Publish/Subscribe模型,使用Golang语言开发.
二、nats消息生命周期
应用程序的数据被编码为一条消息,并通过发布者发送出去;订阅者接收到消息,进行解码,再处理。订阅者处理NATS消息可以是同步的或异步的。
三、nats的消息模型
1、发布/订阅模型
NATS的发布/订阅通信模型是一对多的消息通信。发布者在一个主题上发送消息,任何注册(订阅)了此主题的客户端都可以接收到该主题的消息。订阅者可以使用主题通配符订阅感兴趣的主题。
默认的情形下NATS系统是一种“发送后不管”的消息通信系统
2、请求/响应模型
NATS支持两种请求-响应消息通信:P2P(点对点)和O2M(一对多)。P2P最快、响应也最先。而对于O2M,需要设置请求者可以接收到的响应数量界限(默认只能收到一条来自订阅者的响应——随机)
在请求-响应模式,发布请求操作会发布一个带预期响应的消息到Reply主题。
请求创建了一个收件箱,并在收件箱执行调用,并进行响应和返回.
多个订阅者(reply 例子)订阅了同一个 主题,请求者向该主题发送一个请求,默认只收到一个订阅者的响应(随机)
3、队列模型
NATS支持P2P消息通信的队列。要创建一个消息队列,订阅者需注册一个队列名。所有的订阅者用同一个队列名,形成一个队列组。当消息发送到主题后,队列组会自动选择一个成员接收消息。尽管队列组有多个订阅者,但每条消息只能被组中的一个订阅者接收。
队列的订阅者可以是异步的,这意味着消息句柄以回调方式处理交付的消息。异步队列订阅者必须建立处理消息的逻辑。