一、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. clickhouse在各大厂商的应用

    案例-ClickHouse在头条的技术演进

  2. Oracle日期加减

    1.直接加减数字 SELECT SYSDATE "当前时间", SYSDATE + 1 "加一天", SYSDATE + (1 / 24) "加一小时 ...

  3. KingabseES执行计划-分区剪枝(partition pruning)

    概述 分区修剪(Partition Pruning)是分区表性能的查询优化技术 .在分区修剪中,优化器分析SQL语句中的FROM和WHERE子句,以在构建分区访问列表时消除不需要的分区.此功能使数据库 ...

  4. debian12 出现Waiting for suspend/resume device ... Begin: Running /scripts/local-block ... done.

    /etc/initramfs-tools/conf.d/resume里对应的交换分区的uuid不正确 删除/etc/initramfs-tools/conf.d/resume 再运行 sudo upd ...

  5. Scala 递归和尾递归

    1 package com.atguigu.function 2 3 object Recursion { 4 def main(args: Array[String]): Unit = { 5 // ...

  6. windows下安装SASS

    window下安装ruby与sass(附ruby) webstorm设置sass自动编译,及参数配置 安装sass以及如何在sublime里使用 sublime text 3 配置sass环境 sub ...

  7. 记打包的2个错误-项目BotBattle

    目录 记打包项目的 2 个错误 0.概述 1.spring-boot-maven-plugin 版本 1.1 问题 1.2 添加版本号 2.总项目 2.1 问题 2.2 核验主类 2.3backend ...

  8. 中文GPTS详尽教程,字节扣子Coze插件使用全输出

    今天,斜杠君和大家分享如何在字节扣子Coze中创建插件,并在创建后如何使用这个插件. 一.新建插件 首先,进入到插件页面,创建一个插件. https://www.coze.cn/home 点击左侧的个 ...

  9. java集合源码详解

    一 Collection接口 1.List 1.1ArrayList 特点 1.底层实现基于动态数组,数组特点根据下表查找元素速度所以查找速度较快.继承自接口  Collection ->Lis ...

  10. jenkins安装卸载和下载

    环境 :docker容器 卸载 jenkins 1.rpm卸载rpm -e jenkins 2.检查是否卸载成功rpm -ql jenkins 3.彻底删除残留文件:find / -iname jen ...