高性能消息中间件-Nats使用
一、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使用的更多相关文章
- 高性能消息中间件——NATS
前 言 这段时间我的主要工作内容是将公司系统中使用的RabbitMQ替换成NATS,而此之前我对Nats一无所知.经过一段时间紧张的学习和开发之后我顺利的完成了任务,并对消息中间件有了更深的了解.在此 ...
- nsqlookupd:高性能消息中间件 NSQ 解析
摘要:本篇将会结合源码介绍 nsqlookupd 的实现细节. 本篇将会结合源码介绍 nsqlookupd 的实现细节.nsqlookupd 主要流程与nsqd 执行逻辑相似,区别在于具体运行的任务不 ...
- ActiveMQ;RabbitMQ;ZeroMQ
中间件类型: Embedded middleware: As the name suggests, this typeof middleware handles embedded applicatio ...
- Cloud Foundry中 JasperReports service集成
Cloud Foundry作为业界第一个开源的PaaS解决方案,正越来越多的被业界接受和认可.随着PaaS的发展,Cloud Foundry顺应潮流,充分发挥开源项目的特点,到目前为止,已经支持了大批 ...
- Kafka源码分析(三) - Server端 - 消息存储
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 业务模型 1.1 概念梳理 1.2 文件分析 1.2.1 数据目录 1.2.2 . ...
- 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化
前文目录链接参考: 消息队列的一些场景及源码分析,RocketMQ使用相关问题及性能优化 https://www.cnblogs.com/yizhiamumu/p/16694126.html 消息队列 ...
- Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...
- 消息中间件MetaQ高性能原因分析-转自阿里中间件
简介 MetaQ是一款高性能的消息中间件,经过几年的发展,已经非常成熟稳定,历经多年双11的零点峰值压测,表现堪称完美. MetaQ当前最新最稳定的稳本是3.x系统,MetaQ 3.x重新设计和实现, ...
- AlterNats是如何做到高性能的发布订阅的?
前言 在过去的一些文章里面,我们聊了一些.NET平台上高性能编程的技巧,今天带大家了解一下AlterNats这个库是如何做到远超同类SDK性能的. NATS:NATS是一个开源.轻量级.高性能的分布式 ...
- 阿里开源消息中间件RocketMQ的前世今生-转自阿里中间件
昨天,我们将分布式消息中间件RocketMQ捐赠给了开源软件基金会Apache. 孵化成功后,RocketMQ或将成为国内首个互联网中间件在Apache上的顶级项目. 消息一出,本以为群众的反应是这样 ...
随机推荐
- 一个基于.NET Core构建的简单、跨平台、模块化的商城系统
前言 今天大姚给大家分享一个基于.NET Core构建的简单.跨平台.模块化.完全开源免费(MIT License)的商城系统:Module Shop. 商城后台管理端功能 商品:分类.品牌.单位.选 ...
- redis,mongo,mysql,es区别
Redis.MongoDB.MySQL和Elasticsearch(ES)都是常用的数据库系统,各有不同的特点和适用场景,具体区别如下: Redis:Redis是一种高性能键值存储数据库,基于内存操作 ...
- set集合的HashSet 类
set是一个没有重复元素, 没有存储顺序的集合,它主要有三个实现类,如下: HashSet 类 HashSet 类是按照哈希算法来存储集合中的元素,当向 Set 集合中添加一个元素时,HashSet ...
- Go~开发笔记~目录
Go(又称为Golang)是一门由Google开发的开源编程语言,于2009年首次公开发布.Go语言被设计用来提高软件开发的效率和可靠性,在处理大规模系统时表现出色.以下是Go语言的一些特点和优势: ...
- 深入了解 Spring Cloud Config、Spring Cloud Gateway 与断路器模式
Spring Microservices 是一个框架,它使用 Spring 框架更容易地构建和管理基于微服务的应用程序.微服务是一种架构风格,其中一个大型应用程序被构建为一组小型.独立可部署的服务.每 ...
- k8s之operator
背景 数字经济的兴起推动了云计算.物联网.大数据行业的快速蓬勃发展,对数据中心提出了更高的要求,同时,用户对于数据库运维自动化的需求越来越高,数据库即服务的需求越来越强烈. 随着k8s的普及以及云原生 ...
- 重新整理linux 系列 ——硬件的介绍(一)
前言 打算重新整理linux,计划每天一更,希望能够按照计划执行吧. 正文 首先有一个疑惑,那就是一台手机是否是一台计算机? 来看下什么可以定义为一台计算机: 计算机为接收用户的输入,经由中央处理器的 ...
- iOS自动化打包命令xcodebuild大全
iOS实现自动化打包已经稳定运营几年了,不同的场景用到xcodebuild命令不一样,有的参数可能一直都用不到,列举一些常用的命令,比如编译命令: xcodebuild archive -worksp ...
- spring mvc框架常用注解及用途
@Controller:用于标识是处理器类: @RequestMapping:请求到处理器功能方法的映射规则: @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定: @Mode ...
- 如何基于香橙派AIpro对视频/图像数据进行预处理
本文分享自华为云社区<如何基于香橙派AIpro对视频/图像数据进行预处理>,作者: 昇腾CANN. 受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制.在计算 ...