NATS是一个Golang技术栈的MQ服务,类似NSQ,但NATS更轻量级、性能更好、不支持离线、支持同步/异步通信模型,非常好用。
NATS在MICRO中有哪些应用
- Transport
笔者以前开发后台服务时,直接使用NATS替换RPC实现多机部署、伪负载均衡,Micro也支持NATS作为Transport:
transport := nats.NewTransport()
service := micro.NewService(
micro.Name("go.micro.srv.microsrv"),
micro.Version("latest"),
micro.Transport(transport),
)
- Broker
NATS本身就是MQ服务,NATS支持PUB/SUB,Request/Reply,Queueing三种通信模型,而Micro只需要其PUB/SUB模型。
broker := nats.NewBroker()
service := micro.NewService(
micro.Name("go.micro.srv.microsrv"),
micro.Version("latest"),
micro.Broker(broker),
)
- Registry
是的,你没有看错,有NATS这种MQ来实现服务发行,根据官方文档,NATS来当Registry还工作的很好。Micro的实现原理大致是:
订阅应答主题/广播查询主题(携带应答主题)/收到应答后,超时取消订阅/根据应答(比如时延)返回结果。
优点:每次从服务实例而不是注册中心获取到服务的信息,实时性高,可以根据某些指标选择最优的服务。
缺点:时延长了一点,CLI-NATX-SRV,比传统注册中心(CLI-REGISTRY)多了一段。
其实,NATS的QUEUEING通信模型也可以实习,但是是随机的,效果应该不会很好。