【Go语言从新手到高手】高阶篇-第12章 通信与消息系统 12.2 NATS消息系统

12.2.1 NATS 的核心概念

NATS 是一个高性能的开源消息系统,旨在提供云原生的、分布式的消息通信。NATS 支持多种消息模式,如发布/订阅、点对点队列和请求/响应,是构建微服务架构中的实时数据流解决方案的理想选择。

NATS 核心概念与原理

  1. 主题(Subject)
    • 消息通过主题(类似于频道)进行发布和订阅。
    • 主题可以是简单字符串或带有通配符的层级结构。
  2. 发布/订阅(Pub/Sub)
    • 发布者将消息发送到某个主题,无需指定接收者。
    • 订阅者监听并处理来自某个主题的消息。
  3. 请求/响应(Request/Reply)
    • 客户端可以发送请求并等待响应,实现同步通信模式。
  4. 点对点队列(Queue Groups)
    • 多个订阅者可以加入同一个队列组,一个消息只会被该组中的一个订阅者处理,从而实现负载分担。
  5. 弹性拓扑
    • NATS 的节点可以轻松加入或离开集群,支持动态拓扑变化。

原理详解

  • 无中心化设计:每个 NATS 服务器都是独立的,它们通过路由协议共享消息主题信息,与客户端直接通讯。
  • 轻量级协议:使用文本协议进行控制命令,二进制协议传输消息,确保低延迟和高吞吐率。
  • 自动恢复连接:客户端与服务器之间具有自动重连和断线续传功能,提高整体可用性。

使用场景

  1. 实时数据流:如物联网设备数据采集、金融市场交易流。
  2. 微服务通信:作为服务之间的消息中介,简化服务依赖。
  3. 事件驱动架构:发布事件供多个服务订阅和处理。

流程图

NATS 系统的基本流程: 
+-------------------+ 
| Publisher         | 
+-------------------+ 
         | 
  Publish | 
         v 
+-------------------+ 
| NATS Server       | 
| (Routing Layer)   | 
+-------------------+ 
         |          \ 
      Subscribe      \ Subscribe 
         |            \ 
         v             v 
+-------------------+ +-------------------+ 
| Subscriber A      | | Subscriber B      | 
+-------------------+ +-------------------+ 

优点

  • 高性能:极低的延迟和高吞吐量,适合大量小消息的场景。
  • 易于部署:支持容器化部署,有 Kubernetes 集成,便于管理。
  • 灵活性:支持多种消息模式和复杂拓扑结构。

缺点

  • 功能有限:不支持事务,非持久化消息存储(核心版),需要额外工具实现持久化。
  • 限于内存:主要在内存中操作大量数据,可能受限于内存容量。

总结来说,NATS 为构建分布式和云原生应用提供了一种轻量、高效的方法。它的设计理念注重简单和速度,非常适合需要快速响应时间的实时应用。在使用时,如果需要持久化支持,可以集成 NATS Streaming 或其他存储方案。

12.2.2 发布/订阅模式的应用

NATS 是一个高性能的发布/订阅消息系统,非常适合用于构建实时、分布式的微服务架构。在 NATS 的发布/订阅模式中,消息通过主题(subject)发布和订阅,发布者将消息发送到指定主题,而订阅者监听并接收该主题的消息。

发布/订阅模式介绍

  • 主题(Subject):消息的路由依据,可以是简单字符串,也可以包含通配符以实现更复杂的消息匹配。
  • 发布者(Publisher):产生并发送消息到某个主题,无需知道谁是消息的接收者。
  • 订阅者(Subscriber):注册到某个主题,接收并处理与该主题相关的所有消息。

原理详解

  1. 消息流动
    • 发布者将信息发送到一个主题。
    • NATS 服务器根据主题将消息转发给所有订阅了该主题的订阅者。
  2. 无状态设计
    • 服务器不保存订阅者的状态信息,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值