Nats的基本介绍(详细)
nats就是我们常说的消息中间件 ,与kafka、ActiveMQ、RocketMQ、RabbitMQ一样都属于消息中间件的类型。nats的特点NATS是一个开源、安全、轻量级、可伸缩、高性能的分布式消息通信系统。
什么是nats
- 官网自己的说法:
NATS是一种连接技术,为现代分布式系统提供动力。连接技术负责寻址、发现和交换驱动分布式系统中通用模式的消息;询问和回答问题,又名服务/微服务,制作和处理语句,或流处理。
NATS是一种允许以消息形式分段的数据交换的基础设施。我们称之为“面向消息的中间件”。
简单来说,nats就是我们常说的消息中间件 ,与kafka、ActiveMQ、RocketMQ、RabbitMQ一样都属于消息中间件的类型。
nats的特点
- NATS是一个开源、安全、轻量级、可伸缩、高性能的分布式消息通信系统。NATS服务器是Golang语言开发,客户端由官方和社区提供了10多种语言的客户端。
- nats消息由主题处理,不依赖于网络位置。它提供了应用程序或服务与底层物理网络之间的抽象层。数据被编码并作为消息,由发布者发送。消息由一个或多个订阅者接收、解码和处理。
- NATS使程序可以很容易地跨不同的环境、语言、云提供商和内部系统进行通信。客户机通常通过单个URL连接到NATS系统,然后向主题订阅或发布消息。
-
NATS适合云基础设施的消息通信系统、IoT设备消息通信和微服务架构。Apcera团队负责维护NATS服务器(Golang语言开发)和客户端(包括Go、Python、Ruby、Node.js、Elixir、Java、Nginx、C和C#)
NATS设计目标
- 高性能(fast)
- 高可用(dial tone)
- 轻量级(small footprint)
- 支持多种QoS(at-least-once/at-most-once)
- 支持多种消息通信模型和用例场景(flexible)
优势和劣势
优势
- 纯发布/订阅
- 集群式服务器
- 自动修剪订阅者
- 基于文本的协议
劣势(不提供)
- 持久化
- 事务处理
nats默认是不提供消息持久化的,但如果确实需要消息持久化,nats也提供了一个模块去实现它,那就是NATS Streaming
消息模式
支持3种消息模式:
Publish/Subscribe
Publish/Subscribe是一对多的消息模型。Publisher往一个主题上发送消息,任何订阅了此主题的Subscriber都可以接收到该主题的消息。
服务质量指标:
- 至多发一次
NATS系统是一种“发送后不管”的消息通信系统。往某主题上发送时,如果没有subscriber,或者所有subscriber不在线,则该消息不会给处理。如果需要更高的QoS,可以使用NATS Streaming,或者在客户端中增加可靠性。
- 至少发一次(NATS Streaming)
提供更高的的QoS,但是会付出降低吞吐率和增加延迟的代价。
Request/Reply
publisher往主题中发布一个带预期响应的消息,subscriber执行请求调用,并返回最先的响应。 支持两种请求-响应消息通信模式:
- 点对点:最快、最先的响应。
- 一对多:可以限制Requestor收到的应答数量。
注意:当发送的消息的主题被多个订阅者订阅时,只会处理第一个订阅者回复的消息,后续订阅者回复的消息不作处理
Queueing
subscriber注册的时候,需指定一个队列名。指定相同队列名的subscriber,形成一个队列组。当主题收到消息后,订阅了此主题的队列组,会自动选择一个成员来接收消息。尽管队列组有多个subscriber,但每条消息只能被组中的一个subscriber接收。
Subject(主题)
最简单的来说,subject只是组成名称的一串字符,发布者和订阅者可以使用该名称找到彼此。它有助于将消息限定为流或主题。
推荐使用a-z
,A-Z
和0-9
组合定义subject的名字。特殊字符.
用来分割subject,可以将subject划分成多个层级。而*
,>
被用作通配符。
subject层次结构
字符.
用于创建主题层次结构。例如,一个世界时钟应用程序可以定义以下内容来对相关主题进行逻辑分组:
*的特点时只匹配单层的主题
>的特点时匹配多层的主题
到这里关于nats的基本介绍就讲的差不多的,后续我详细介绍nats服务和nats客户端的使用,如有不对的地方,欢迎指出
更多推荐
所有评论(0)