NATS集群
NATS集群
集群模式
nats的集群模式对客户端来说并不是透明的。所以集群对发布者和订阅者都是有影响的。发布者和订阅者都知道连接的是一个集群的服务,而不是一个单点服务,换句话说发布者订阅者都必须指明集群中各个节点的地址。当然,发布者和订阅者可以只针对集群中的某节点发布消息和订阅消息,不过这并不是集群模式的目的。
目的
提高可用性和可伸缩性。
实现原理
可用性,多个节点,挂掉任意一个,不影响整个集群对外提供服务。伸缩性,服务端支持随意增加节点。订阅者可以感知服务端节点的变动,但是发布者并不能自动感知。
创建集群
1 | gnatsd -p 4222 -m 4333 -cluster nats://localhost:4248 -routes nats://localhost:5248,nats://localhost:6248 -DV |
- -p 端口:服务端口,发布者,订阅者需要使用此端口。
- -m 端口: 监控端口。
- -cluster 地址:作为集群节点对其他节点提供服务的地址,其他节点需要连接的地址。(其他节点的-routes 可以填写此地址)
- -routes 地址:此节点,路由到其他地址的列表(也就是其他节点的-cluster)
- -DV Debug and trace
gnatsd -p 服务提供端口 -m 服务监控端口 -cluster 集群内node地址 -routes 集群内其他node地址列表 -DV
go实例
服务器
1 | package main |
客户端
1 | package main |
注意
- 发布者和订阅者都需要指明3个节点的ur地址
nats://localhost:4222,nats://localhost:5222,nats://localhost:6222 - 如果3个node都不可用,发布者会发送消息失败。
- 如果3个node至少有一个可用,订阅者就会收到消息。
- 如果3个node全都不可用,订阅者会自动断开连接。
- 增加一个node nats://localhost:7222,订阅者可以自动连接。
- 增加node后,3个node全都不可用,订阅者不会断开连接,可以接受从新node发布的消息。
- 3个node恢复后,订阅者可以接受3个node的消息。
NATS启动配置
发布者和订阅者
- 原始集群中node都不可用
- 主动查询可用node
- 接受可用node通知
- 向可用node发送消息,订阅可用node的消息
- 以上内容需要配合服务发现中间件或者自己实现
配置文件启动
1 | gnatsd -c nodea.cfg |
nodea.cfg
1 | listen: localhost:4222 # host/port to listen for client connections |
nodeb.cfg
1 | listen: localhost:5222 # host/port to listen for client connections |
nodec.cfg
1 | listen: localhost:6222 # host/port to listen for client connections |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blank!
评论