NotePublic/Software/System/NATS/NATS_详解.md

127 lines
3.1 KiB
Markdown
Raw Normal View History

# NATS 详解
TODO:
<https://docs.nats.io/nats-concepts/intro>
<https://blog.csdn.net/weixin_43465618/article/details/105173862>
<https://www.cnblogs.com/ailumiyana/p/12046578.html>
<https://cloud.tencent.com/developer/article/1500309>
<https://learnku.com/docs/go-micro/1.x/nats/8245>
<https://cloud.tencent.com/developer/article/1506392>
## 1.基本概念
### 1.1.What is NATS
### 1.2.Subject-Based Messaging
### 1.3.发布Publish-订阅Subscribe
NATS 实现了一对多发布订阅消息模型。当 publisher 往 subject 上发布一条消息后,此 subject 上所有 subscriber 都能收到 此消息,属于一种广播。
### 1.4.请求Request-响应Reply
一般来说消息系统是以异步的形式工作也就是说publisher 往 subject 上发布一条消息后,并不在意 subscriber 的 reply 是什么。如果 publisher 在意 subscriber 的 reply 是什么的话,那么消息系统就应该以同步的形式工作,在具体实现中,是通过两次发布订阅来完成的:当 publisher 发布消息后,它会订阅一个特定的 subject当 subscriber 处理完消息后,它会把 reply 发布到这个特定的 subject。当然整个过程对使用者是透明的。
### 1.5.Queue Groups
如果我们把 subscriber 分组,那么当 publisher 往 subject 上发布一条消息后,同一组里只有一个 subscriber 会收到此消息(每个成员都有相同的机会接收该消息),从而实现了负载均衡。
### 1.6.Acknowledgements
### 1.7.Sequence Numbers
## 2.NATS 的安装和运行
安装服务程序:
```bash
# Ubuntu
aria2c -c -x16 -s16 https://github.com/nats-io/nats-server/releases/download/v2.3.0/nats-server-v2.3.0-amd64.deb
apt install ./nats-server-v2.3.0-amd64.deb
```
安装客户端支持库:
```bash
# Golang
go get github.com/nats-io/nats.go/
```
启动 NATS 服务:
```bash
nats-server
```
## 3.Golang Client API
### 3.1.同步订阅
### 3.2.异步订阅
### 3.3.取消订阅
### 3.4.在 N 个消息后取消订阅
### 3.5.回复消息
### 3.6.通配符订阅
### 3.7.队列订阅
如果我们把 subscriber 分组,那么当 publisher 往 subject 上发布一条消息后,同一组里只有一个 subscriber 会收到此消息(每个成员都有相同的机会接收该消息),从而实现了负载均衡:
```go
nc, err := nats.Connect("demo.nats.io")
if err != nil {
log.Fatal(err)
}
defer nc.Close()
// Use a WaitGroup to wait for 10 messages to arrive
wg := sync.WaitGroup{}
wg.Add(10)
// Create a queue subscription on "updates" with queue name "workers"
if _, err := nc.QueueSubscribe("updates", "workers", func(m *nats.Msg) {
wg.Done()
}); err != nil {
log.Fatal(err)
}
// Wait for messages to come in
wg.Wait()
```
### 3.8..断开连接前排空drain消息
### 3.9..结构化数据
## 4.NATS Tools
### 4.1.Introduction
### 4.2.nats
### 4.3.nk
### 4.4.nsc
### 4.5.nats-account-server
### 4.6.nats-top
### 4.7.nats-bench
### 4.8.natsboard
说到监控,除了前面提到的 nats-top 之外,还有诸如 natsboard 之类的 UI 可供选择:
![natsboard](./img/NATS_详解/001.png)