NATS 相关概念

NATS是一种分布式消息传递系统,提供基于主题的消息传递,支持发布-订阅和请求-回复模式,以及队列组实现负载均衡。通过主题和通配符,订阅者可以监听多个主题。NATS的核心提供最多一次服务质量,但可通过ACK和序列号增强可靠性。队列订阅用于在组内平衡消息处理,允许扩展和容错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是NATS

通过NATS消息传递,可以在计算机应用程序和服务之间交换细分为消息的数据。这些消息由主题处理,并且与网络位置无关。这在应用程序或服务与基础物理网络之间提供了一个抽象层。数据被编码并构造为消息,然后由发布者发送。该消息由一个或多个订户接收,解码和处理。
通过NATS,程序可以轻松地在不同的环境,语言,云提供商和本地系统之间进行通信。客户端通常通过单个URL连接到NATS系统,然后订阅或发布消息给主题。通过这种简单的设计,NATS可以使程序共享常见的消息处理代码,隔离资源和相互依赖性,并通过轻松处理消息量的增加(无论是服务请求还是流数据)来进行扩展。
在这里插入图片描述

NATS核心 最多 提供 一次 服务质量。如果订户没有在听主题(没有主题匹配),或者在发送消息时未处于活动状态,则不会接收到该消息。这与TCP / IP提供的保证级别相同。默认情况下,NATS是一劳永逸的消息传递系统。如果您需要更高级别的服务,则可以使用NATS流技术,或者通过经过验证的可扩展参考设计(例如,ack序列号)在客户端应用程序中构建更高的可靠性。

基于主题的消息传递

从根本上讲,NATS是关于发布和侦听消息的。两者都严重依赖于主题,主题将消息划分为流或主题。最简单的说,主题只是构成发布者和订阅者可以用来相互查找的名称的字符串。
在这里插入图片描述

NATS服务器保留一些特殊字符,并且规范规定仅“字母数字”字符加“”。应该在主题名称中使用。主题区分大小写,并且不能包含空格。为了确保客户之间的安全,应使用ASCII字符,尽管将来可能会更改。

主题层次结构

. 字符用于创建主题层次结构。例如,世界时钟应用程序可能定义以下内容以对相关主题进行逻辑分组:

time.us
time.us.east
time.us.east.atlanta
time.eu.east
time.eu.warsaw

通配符

NATS提供了两个通配符,它们可以代替点分隔主题中的一个或多个元素。订阅者可以使用这些通配符通过单个订阅来收听多个主题,但是发布者将始终使用完全指定的主题,而没有通配符。

匹配单个令牌

第一个通配符是*,它将与单个令牌匹配。 例如,如果应用程序想收听东部时区,则他们可以订阅time.*.east,它将匹配time.us.east和time.eu.east。
在这里插入图片描述

匹配多个令牌

匹配多个令牌
第二个通配符是>,它将匹配一个或多个标记,并且只能出现在主题的末尾。 例如,time.us.>将匹配time.us.east和time.us.east.atlanta,而time.us. *仅匹配time.us.east,因为它不能匹配多个令牌。
time.us.east time.us.east.atlanta time.us.* time.us.east

在这里插入图片描述

监控和丝锥

根据您的安全性配置,通配符可以通过创建有时称为电线抽头的东西用于监视。在最简单的情况下,您可以为 > 创建订阅者。此应用程序将接收在您的NATS群集上发送的所有消息-再次受安全性设置的约束。

混合通配符

通配符可以在同一主题中出现多次。 两种类型也都可以使用。 例如,.*.east.>将收到time.us.east.atlanta。

发布-订阅

NATS实现了一对多通信的发布-订阅消息分发模型。发布者发送有关主题的消息,任何正在侦听该主题的活动订户都将收到该消息。订阅者还可以注册对通配符主题感兴趣的通配符主题,该通配符主题的工作方式类似于正则表达式(但仅一点点)。这种一对多模式有时称为扇出。
在这里插入图片描述

通过运行pub-sub教程,使用实时服务器尝试NATS publish自己进行订阅。

请求-回复

请求-答复是现代分布式系统中的常见模式。发送了一个请求,应用程序要么等待某个超时的响应,要么异步接收响应。现代系统日益增加的复杂性要求诸如位置透明性,按比例放大和按比例缩小,可观察性等特征。许多技术需要其他组件,辅助工具和代理来完成完整的功能集。
NATS通过其核心通信机制(发布和订阅)支持此模式。在具有答复主题的给定主题上发布请求,响应者侦听该主题并将响应发送给答复主题。回复主题是称为收件箱的唯一主题,无论任何一方的位置如何,该主题都会动态地定向回请求者。
NATS允许多个响应者运行并形成动态队列组,以实现透明扩展。NATS应用程序能够在退出之前耗尽资源,从而可以缩小规模而不会丢弃任何请求。由于NATS基于发布-订阅,因此可观察性就像运行另一个应用程序一样简单,该应用程序可以查看请求和响应以测量延迟,监视异常情况,直接可伸缩性等等。
NATS的功能甚至允许多个响应,其中利用了第一个响应,系统有效地丢弃了其他响应。这允许复杂的模式使多个响应者减少响应等待时间和抖动。
在这里插入图片描述

使用实时服务器,通过逐步浏览请求/答复教程,尝试自己尝试NATS请求答复。

队列组

NATS提供了内置的负载平衡功能,称为分布式队列。使用队列订户将平衡一组订户之间的消息传递,这些消息可用于提供应用程序容错能力和扩展工作量处理。
要创建队列订阅,订阅者需要注册一个队列名称。具有相同队列名称的所有订户构成队列组。这不需要任何配置。在发布有关注册主题的消息时,将随机选择一个组的成员来接收消息。尽管队列组有多个订户,但是每个消息仅由一个使用。
队列组名称遵循与主题相同的命名规则。首先,它们区分大小写,并且不能包含空格。考虑使用分层构造队列组。某些服务器功能可以 . 在它们上使用通配符匹配
NATS的一大功能是队列组是由应用程序及其队列订阅者定义的,而不是在服务器配置上定义的。
队列订户是扩展服务的理想选择。向上扩展与运行另一个应用程序一样简单,向下扩展则通过消耗正在运行的请求的信号终止应用程序。这种灵活性和没有任何配置更改的优势使NATS成为了一种出色的服务通信技术,可以与所有平台技术一起使用。
在这里插入图片描述

通过使用实时服务器,通过逐步学习排队教程,自己尝试NATS队列订阅。

致谢

在具有最多一次语义的系统中,有时会丢失消息。如果您的应用程序正在执行请求-答复,则应使用超时来处理任何网络或应用程序故障。在请求上放置超时并拥有处理超时的代码总是一个好主意。发布事件或数据流时,确保消息传递的一种方法是使用确认消息或ACK的概念将其转换为请求-应答。在NATS中,ACK可以只是一个空消息,即没有有效载荷的消息。
在这里插入图片描述

因为ACK可以为空,所以它只占用很少的网络带宽,但是ACK的思想将一个简单的“即发即忘”变成了“即发即弃”的世界,在该世界中,发件人可以确定邮件是由接收方发送的。另一面,或具有散布聚集图案的另一面。

序列号

一对多消息的一个常见问题是消息可能由于网络故障而丢失或丢失。解决此情况的简单模式是在消息中包含序列ID。接收者可以检查序列ID,以查看是否错过了任何内容。在没有新数据的情况下,序列号与心跳相结合形成了一种强大而有弹性的模式来检测丢失。存储并保留消息的系统也可以解决此问题,但是有时对于眼前的问题而言过于矫kill过正,通常会导致额外的管理和运营成本。
在这里插入图片描述

为了真正利用序列ID,需要牢记以下几点:

  • 每个发件人都必须使用自己的顺序
  • 如果可能的话,接收者应该能够通过id请求丢失消息

使用NATS,您可以在消息中嵌入序列ID或将其作为标记包含在主题中。例如,发送者可以向,等发送消息,而订阅者可以收听并解析主题以确定序列ID。如果未知有效载荷,或者无法在有效载荷中嵌入诸如序列号之类的附加数据,则可能需要将序列令牌放入对象。 updates.1 updates.2 updates.*

原文链接:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值