一、Nats简介

官网:https://nats.io/
官网下载:https://nats.io/download/
github:https://github.com/nats-io/nats-server/releases
dockerhub:https://hub.docker.com/_/nats NATS是一个开源、轻量级、高性能的分布式消息中间件,使用Golang语言开发,实现了高可伸缩性和优雅的Publish/Subscribe模型,但他不保证消息的到达,持久性等特性,nats streaming即为解决这一问题.
NATS的开发哲学认为高质量的QoS应该在客户端构建,故只建立了Request-Reply,不提供 1.持久化 2.事务处理 3.增强的交付模式 4.企业级队列。 NATS消息传递模型
NATS支持各种消息传递模型,包括:
发布订阅(Publish Subscribe)
请求回复(Request Reply)
队列订阅(Queue Subscribers ) 提供的功能:
纯粹的发布订阅模型(Pure pub-sub)
服务器集群(Cluster mode server)
自动精简订阅者(Auto-pruning of subscribers)
基于文本协议(Text-based protocol)
多服务质量保证(Multiple qualities of service - QoS)
发布订阅(Publish Subscribe) nats三种工作模式:
pub/sub (1对多)
request/reply(1对多 设置超时,只要有一个回复就结束)
queue(1对1) 优点:
1.使用简单,配置简单。
2.速度极快,性能良好。
3.多语言支持,不依赖于网络位置,client端只需知道nats的节点和约定好的subject名称即可。 缺点:
1.对服务器稳定性要求较高,机房出现故障,导致nats server端需要重连。可能需要重启nats-server。
2.在消息timeout后,需要在reconnection里要重新初始化连接,不方便。

二、安装

2.1 docker方式安装
docker pull nats
# 启动:
docker run -d -p 4222:4222 -p 6222:6222 -p 8222:8222 --name nats-main nats:latest
2.2 nats 下载安装
cd /usr/local/
tar -xzvf nats-server-v2.9.15-linux-amd64.tar.gz
mv nats-server-v2.9.15-linux-amd64 nats-server
cd nats-server
[root@testyxqy local]# tree nats-server/
nats-server/
|-- LICENSE
|-- nats-server
`-- README.md 0 directories, 3 files

# Client port of 4222 on all interfaces
port: 4222 # HTTP monitoring port
monitor_port: 8222 # This is for clustering multiple servers together.
cluster {
# It is recommended to set a cluster name
name: "my_cluster" # Route connections to be received on any interface on port 6222
port: 6222 # Routes are protected, so need to use them with --routes flag
# e.g. --routes=nats-route://ruser:T0pS3cr3t@otherdockerhost:6222
authorization {
user: ruser
password: T0pS3cr3t
timeout: 2
} # Routes are actively solicited and connected to from this server.
# This Docker image has none by default, but you can pass a
# flag to the nats-server docker image to create one to an existing server.
routes = []
}

nats默认配置文件

服务器选项:
-a, --addr <host> 绑定主机IP地址(默认是0.0.0.0)
-p, --port <port> 客户端连接NATS服务器使用的端口(默认是4222)
-n, --name <server_name> 服务器名字(默认:自动)
-P, --pid <file> 存储PID的文件
-m, --http_port <port> HTTP监听端口
-ms,--https_port <port> HTTPS监听端口
-c, --config <file> 指定配置文件
-t 测试配置文并退出
-sl,--signal <signal>[=<pid>] 向 nats-server 进程发送信号(停止、退出、重新打开、重新加载)
<pid> 可以是 PID(例如 1)或 PID 文件的路径(例如 /var/run/nats-server.pid)
--client_advertise <string> 向其他服务器广播的客户端 URL 日志选项:
-l, --log <file> 指定日志输出的文件
-T, --logtime 是否开启日志的时间戳(默认为true)
-s, --syslog 启用syslog作为日志方法
-r, --remote_syslog <addr> 远程日志服务器的地址(默认为udp://localhost:514)
-D, --debug 开启调试输出
-V, --trace 跟踪原始的协议
-VV 详细跟踪(也跟踪系统帐户)
-DV 调试并跟踪
-DVV 调试和详细跟踪(也跟踪系统帐户) JetStream 选项:
-js, --jetstream 启用 JetStream 功能。
-sd, --store_dir <dir> 设置存储目录。 授权认证选项:
--user <user> 连接需要的用户名
--pass <password> 连接需要的密码
--auth <token> 连接所需的授权令牌 TLS 安全选项:
--tls 启用TLS,不验证客户端(默认为false)
--tlscert <file> 服务器证书文件
--tlskey <file> 服务器证书私钥
--tlsverify 启用TLS,每一个客户端都要认证
--tlscacert <file> 客户端证书CA用于认证 集群选项:
--routes <rurl-1, rurl-2> 请求和连接的路由
--cluster <cluster-url> 请求路由的集群 URL
--cluster_name <string> Cluster Name,如果不设置会动态生成一个
--no_advertise <bool> 不向客户端通告已知的集群信息
--cluster_advertise <string> 向其他服务器通告的集群 URL
--connect_retries <number> 连接重试次数 常规选项:
-h, --help 显示帮助消息
-v, --version 显示版本信息
--help_tls 显示TLS 帮助消息

启动参数配置说明

2.3 使用配置文件启动
[root@testyxqy nats-server]# ./nats-server -c nats.yml
[16228] 2023/04/18 16:46:24.250449 [INF] Starting nats-server
[16228] 2023/04/18 16:46:24.250503 [INF] Version: 2.9.15
[16228] 2023/04/18 16:46:24.250508 [INF] Git: [b91fa85]
[16228] 2023/04/18 16:46:24.250512 [INF] Cluster: my_cluster
[16228] 2023/04/18 16:46:24.250516 [INF] Name: NAJWLAJQZ6PLSDAYCLUYF4JOU6BVERLWFBP42CZFHYEDN4WXP7RRSODT
[16228] 2023/04/18 16:46:24.250520 [INF] ID: NAJWLAJQZ6PLSDAYCLUYF4JOU6BVERLWFBP42CZFHYEDN4WXP7RRSODT
[16228] 2023/04/18 16:46:24.250537 [INF] Using configuration file: nats.yml
[16228] 2023/04/18 16:46:24.251156 [INF] Starting http monitor on 0.0.0.0:8222
[16228] 2023/04/18 16:46:24.251264 [INF] Listening for client connections on 0.0.0.0:4222
[16228] 2023/04/18 16:46:24.251478 [INF] Server is ready
[16228] 2023/04/18 16:46:24.251525 [INF] Cluster name is my_cluster
[16228] 2023/04/18 16:46:24.251558 [INF] Listening for route connections on 0.0.0.0:6222 [root@testyxqy ~]# netstat -ntlp | grep nats
tcp6 0 0 :::4222 :::* LISTEN 16228/./nats-server
tcp6 0 0 :::8222 :::* LISTEN 16228/./nats-server
tcp6 0 0 :::6222 :::* LISTEN 16228/./nats-server

三、发布/订阅模式的验证

使用两个客户端进行验证。在远程Windows主机上开两个CMD命令行环境,均使用命令“C:> telnet xxx.xxx.xxx.xxx 4222”连上nats-server。为了以示区别,这里命名为客户端A和客户端B,A表示发布者,B表示订阅者。
telnet 连接显示 4222
INFO {"server_id":"NAJWLAJQZ6PLSDAYCLUYF4JOU6BVERLWFBP42CZFHYEDN4WXP7RRSODT","server_name":"NAJWLAJQZ6PLSDAYCLUYF4JOU6BVERLWFBP42CZFHYEDN4WXP7RRSODT","version":"2.9.15","proto":1,"git_commit":"b91fa85","go":"go1.19.6","host":"0.0.0.0","port":4222,"headers":true,"max_payload":1048576,"client_id":4,"client_ip":"本机外网IP","cluster":"my_cluster"}
# 1)订阅者B运行
订阅者B使用通配符foot.*注册主题ID为90的主题,订阅成功,nats-server返回+OK消息
sub foo.* 90
+OK # 2)发布者A运行
发布者A发布一条消息到主题foo.bar,消息有效负载的长度为5,按下回车。消息发布成功,nats-server返回+OK消息。
pub foo.bar 5
hello
+OK # 订阅者B显示:可以看到获得的消息
PING
MSG foo.bar 90 5
hello # 3)发布者A继续执行
发布者A继续执行以下命令,消息发布成功,nats-server服务器返回+OK消息
pub foo.bar optional.reply.subject 5
hello
+OK # 订阅者B显示:PING是维持连接的消息
PING
MSG foo.bar 90 optional.reply.subject 5
hello # 引用:
https://blog.csdn.net/weixin_39616603/article/details/99624251

高性能消息中间件-Nats使用的更多相关文章

  1. 高性能消息中间件——NATS

    前 言 这段时间我的主要工作内容是将公司系统中使用的RabbitMQ替换成NATS,而此之前我对Nats一无所知.经过一段时间紧张的学习和开发之后我顺利的完成了任务,并对消息中间件有了更深的了解.在此 ...

  2. nsqlookupd:高性能消息中间件 NSQ 解析

    摘要:本篇将会结合源码介绍 nsqlookupd 的实现细节. 本篇将会结合源码介绍 nsqlookupd 的实现细节.nsqlookupd 主要流程与nsqd 执行逻辑相似,区别在于具体运行的任务不 ...

  3. ActiveMQ;RabbitMQ;ZeroMQ

    中间件类型: Embedded middleware: As the name suggests, this typeof middleware handles embedded applicatio ...

  4. Cloud Foundry中 JasperReports service集成

    Cloud Foundry作为业界第一个开源的PaaS解决方案,正越来越多的被业界接受和认可.随着PaaS的发展,Cloud Foundry顺应潮流,充分发挥开源项目的特点,到目前为止,已经支持了大批 ...

  5. Kafka源码分析(三) - Server端 - 消息存储

    系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 业务模型 1.1 概念梳理 1.2 文件分析 1.2.1 数据目录 1.2.2 . ...

  6. 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化

    前文目录链接参考: 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化 https://www.cnblogs.com/yizhiamumu/p/16694126.html 消息队列 ...

  7. Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)

    文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...

  8. 消息中间件MetaQ高性能原因分析-转自阿里中间件

    简介 MetaQ是一款高性能的消息中间件,经过几年的发展,已经非常成熟稳定,历经多年双11的零点峰值压测,表现堪称完美. MetaQ当前最新最稳定的稳本是3.x系统,MetaQ 3.x重新设计和实现, ...

  9. AlterNats是如何做到高性能的发布订阅的?

    前言 在过去的一些文章里面,我们聊了一些.NET平台上高性能编程的技巧,今天带大家了解一下AlterNats这个库是如何做到远超同类SDK性能的. NATS:NATS是一个开源.轻量级.高性能的分布式 ...

  10. 阿里开源消息中间件RocketMQ的前世今生-转自阿里中间件

    昨天,我们将分布式消息中间件RocketMQ捐赠给了开源软件基金会Apache. 孵化成功后,RocketMQ或将成为国内首个互联网中间件在Apache上的顶级项目. 消息一出,本以为群众的反应是这样 ...

随机推荐

  1. 记录--a标签跳转新地址无法访问,但手动输入新地址可以访问

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 问题描述 最近遇到一个有意思的问题,项目中有一个地方,点击需要跳转到一个新的域名地址 笔者使用a标签做跳转,跳是跳过去了,可是跳过去以后, ...

  2. 记录--图解 Vue 响应式原理

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近部门分享,有同学提到了 Vue 响应式原理,大家在讨论时,发现一些同学对这一知识理解还不够深入,不能形成一个闭环,为了帮助大家理解这个 ...

  3. Arch Linux 安装手记

    背景 今天尝试安装龙芯版 Linux,本来希望能安装 Debian 版,但只找到一些文档,没找到可安装版的 ISO. 后来顺着这篇文章找到了Arch Linux,就尝试安装了一下. 安装后发现竟然不会 ...

  4. MySQL与Java JDBC数据类型对照

    MySQL数据类型 JAVA数据类型 JDBC TYPE BIGINT Long BIGINT TINYINT Byte TINYINT SMALLINT Short SMALLINT MEDIUMI ...

  5. #状压dp#JZOJ 3853 帮助Bsny

    题目 一共有\(n\)本书,混乱值是连续相同高度书本的段数. 可以取出\(k\)本书随意放回,问最小混乱值,高度\([25\sim 32]\) 分析 设\(f[i][j][k][mask]\)表示前\ ...

  6. Docker学习路线13:部署容器

    部署容器是使用Docker和容器化管理应用程序更高效.易于扩展和确保跨环境一致性性能的关键步骤.本主题将为您概述如何部署Docker容器以创建和运行应用程序. 概述 Docker容器是轻量级.可移植且 ...

  7. CondeseNetV2:清华与华为出品,保持特征的新鲜是特征复用的关键 | CVPR 2021

    论文提出SFR模块,直接重新激活一组浅层特征来提升其在后续层的复用效率,而且整个重激活模式可端到端学习.由于重激活的稀疏性,额外引入的计算量非常小.从实验结果来看,基于SFR模块提出的CondeseN ...

  8. 使用PTK卸载数据库时删除用户失败怎么办?

    使用 PTK 卸载数据库时删除用户失败怎么办? 背景介绍: PTK (Provisioning Toolkit)是一款针对 MogDB 数据库开发的软件安装和运维工具,旨在帮助用户更便捷地安装部署 M ...

  9. 深入理解MD5算法:原理、应用与安全

    第一章:引言 导言 在当今数字化时代,数据安全和完整性变得至关重要.消息摘要算法是一种用于验证数据完整性和安全性的重要工具.在众多消息摘要算法中,MD5(Message Digest Algorith ...

  10. 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是使能i.MXRT1050, 1060 Hab签名或加密启动时App链接在片内SRAM的限制. 最近有客户反馈,在 RT1060 上测试 ...