NATS——NATS初识——NATS服务器启动——测试用例运行
NATS初识
https://github.com/nats-io
https://github.com/nats-io/nats-server
https://github.com/nats-io/nats.go
https://github.com/nats-io/nats-streaming-server
https://github.com/nats-io/stan.go
https://nats.io/download/
https://docs.nats.io/running-a-nats-service/introduction/installation
https://docs.nats.io/running-a-nats-service/clients
核心 nats-server 无持久化。
nats-streaming-server streaming内置nats-server服务器,带持久化 。
nats-server 的启动与测试
1、服务启动
下载 https://github.com/nats-io/nats-server 后, 进入目录../nats/nats-io/nats-server-main
执行 go build, 生成可执行文件 nats-server
执行 ./nats-server
localhost:nats-server-main chong$ ./nats-server [9854] 2022/01/10 15:43:29.571138 [INF] Starting nats-server [9854] 2022/01/10 15:43:29.571426 [INF] Version: 2.7.0-beta [9854] 2022/01/10 15:43:29.571430 [INF] Git: [not set] [9854] 2022/01/10 15:43:29.571440 [INF] Name: NBNLIDMD3YGE7XIQ54PVN2WYRFINJ6NONBIQJYP6F4VSTHYMS4ORFHPQ [9854] 2022/01/10 15:43:29.571460 [INF] ID: NBNLIDMD3YGE7XIQ54PVN2WYRFINJ6NONBIQJYP6F4VSTHYMS4ORFHPQ [9854] 2022/01/10 15:43:29.584612 [INF] Listening for client connections on 0.0.0.0:4222 [9854] 2022/01/10 15:43:29.585148 [INF] Server is ready
2、基本测试用例
这是go版本的nats客户端
下载 https://github.com/nats-io/nats.go 后, 进入目录../nats/nats.go-main/examples
先启用主题监听 go run nats-sub/main.go -s nats://127.0.0.1:4222 -t foo
发布主题及消息 go run nats-pub/main.go -s nats://127.0.0.1:4222 foo "msg two"
localhost:examples chong$ go run nats-pub/main.go -s nats://127.0.0.1:4222 foo "msg two" Published [foo] : 'msg two' localhost:examples chong$ localhost:examples chong$ go run nats-pub/main.go -s nats://127.0.0.1:4222 foo "msg two" Published [foo] : 'msg two'
localhost:examples chong$ go run nats-sub/main.go -s nats://127.0.0.1:4222 -t foo Listening on [foo] 2022/01/10 15:51:35 [#1] Received on [foo]: 'msg two' 2022/01/10 15:51:47 [#2] Received on [foo]: 'msg two' 2022/01/10 15:51:52 Disconnected due to:EOF, will attempt reconnects for 10m 2022/01/10 15:51:53 Reconnected [nats://127.0.0.1:4222] 2022/01/10 15:52:06 [#3] Received on [foo]: 'msg one'
nats-streaming-serve 的启动与测试
1、服务启动
下载源码 https://github.com/nats-io/nats-streaming-server 后,进入../nats/nats-streaming-server-main目录
执行 go build , 生成可执行文件 nats-streaming-server
不带参数的启动命令 ./nats-streaming-server
带参数的的启动命令
./nats-streaming-server --store file --dir /Users/chong/Documents/code/go/nats/streaming-store-files --max_msgs 0 --max_bytes 0
localhost:nats-streaming-server-main chong$ ./nats-streaming-server --store file \
--dir /Users/chong/Documents/code/go/nats/streaming-store-files \
--max_msgs 0 --max_bytes 0 [91741] 2022/01/09 09:28:54.749153 [INF] STREAM:
Starting nats-streaming-server[test-cluster] version 0.23.2 [91741] 2022/01/09 09:28:54.749378 [INF] STREAM: ServerID: iL8tEmZBdTqud0rQbwzuro [91741] 2022/01/09 09:28:54.749382 [INF] STREAM: Go version: go1.17.3 [91741] 2022/01/09 09:28:54.749385 [INF] STREAM: Git commit: [not set] [91741] 2022/01/09 09:28:54.753269 [INF] Starting nats-server [91741] 2022/01/09 09:28:54.753288 [INF] Version: 2.6.5 [91741] 2022/01/09 09:28:54.753292 [INF] Git: [not set] [91741] 2022/01/09 09:28:54.753302 [INF] Name: NDBGMWEP6JYRPYAMU3XUZLCIRJHEZNDRLIZEUTLMOTHH [91741] 2022/01/09 09:28:54.753306 [INF] ID: NDBGMWEP6JYRPYAMU3XUZLCIRJ3HZNDRLIZEUTLMOTHH [91741] 2022/01/09 09:28:54.758760 [INF] Listening for client connections on 0.0.0.0:4222 [91741] 2022/01/09 09:28:54.759308 [INF] Server is ready [91741] 2022/01/09 09:28:54.785453 [INF] STREAM: Recovering the state... [91741] 2022/01/09 09:28:54.785841 [INF] STREAM: No recovered state [91741] 2022/01/09 09:28:54.787267 [INF] STREAM: Message store is FILE [91741] 2022/01/09 09:28:54.787276 [INF] STREAM: Store location:
/Users/chong/Documents/code/go/nats/streaming-store-files [91741] 2022/01/09 09:28:54.787338 [INF] STREAM: ---------- Store Limits ---------- [91741] 2022/01/09 09:28:54.787343 [INF] STREAM: Channels: 100 * [91741] 2022/01/09 09:28:54.787346 [INF] STREAM: --------- Channels Limits -------- [91741] 2022/01/09 09:28:54.787350 [INF] STREAM: Subscriptions: 1000 * [91741] 2022/01/09 09:28:54.787353 [INF] STREAM: Messages : unlimited [91741] 2022/01/09 09:28:54.787356 [INF] STREAM: Bytes : unlimited [91741] 2022/01/09 09:28:54.787359 [INF] STREAM: Age : unlimited * [91741] 2022/01/09 09:28:54.787362 [INF] STREAM: Inactivity : unlimited * [91741] 2022/01/09 09:28:54.787365 [INF] STREAM: ---------------------------------- [91741] 2022/01/09 09:28:54.787368 [INF] STREAM: Streaming Server is ready
2、测试用例
下载源码 https://github.com/nats-io/stan.go , 进入目录 ../nats/stan.go-main/examples
发布主题及消息 go run stan-pub/main.go -s nats://127.0.0.1:4222 foo "msg nine..."
订阅主题 go run stan-sub/main.go -s nats://127.0.0.1:4222 -t foo
发布过程如下:
localhost:examples chong$ go run stan-pub/main.go foo "msg nine..." go: downloading github.com/nats-io/nats.go v1.13.0 go: downloading github.com/gogo/protobuf v1.3.2 Published [foo] : 'msg nine...' localhost:examples chong$ localhost:examples chong$ localhost:examples chong$ localhost:examples chong$ localhost:examples chong$ go run stan-pub/main.go foo "msg nine..." Published [foo] : 'msg nine...' localhost:examples chong$ localhost:examples chong$ localhost:examples chong$ go run stan-pub/main.go foo "msg nine..." Published [foo] : 'msg nine...' localhost:examples chong$ localhost:examples chong$ pwd /Users/chong/Documents/code/go/nats/stan.go-main/examples localhost:examples chong$ localhost:examples chong$ localhost:examples chong$ go run stan-pub/main.go -s nats://127.0.0.1:4222 foo "msg nine..." Published [foo] : 'msg nine...' localhost:examples chong$
首次执行时,go会根据 go.mod 获取、安装依赖。
订阅情况如下:
localhost:examples chong$ go run stan-sub/main.go -s nats://127.0.0.1:4222 -t foo Connected to nats://127.0.0.1:4222 clusterID: [test-cluster] clientID: [stan-sub] Listening on [foo], clientID=[stan-sub], qgroup=[] durable=[] 2022/01/10 16:26:43 [#1] Received: sequence:1 subject:"foo" data:"msg nine..." timestamp:1641802805067115000 2022/01/10 16:26:43 [#2] Received: sequence:2 subject:"foo" data:"msg nine..." timestamp:1641802826574706000 2022/01/10 16:26:43 [#3] Received: sequence:3 subject:"foo" data:"msg nine..." timestamp:1641802869268707000 2022/01/10 16:26:43 [#4] Received: sequence:4 subject:"foo" data:"msg nine..." timestamp:1641803177556474000
订阅中的可选参数
go run examples/stan-sub/main.go -s nats://127.0.0.1:4222 --all -c test-cluster -id stan-sub -t foo
go run examples/stan-sub/main.go -s nats://127.0.0.1:4222 --seq 4 -c test-cluster -id stan-sub -t foo
go run examples/stan-sub/main.go -s nats://127.0.0.1:4222 --last -c test-cluster -id stan-sub -t foo
--seq <seqno> 从指定的序列号开始 --all 接受所有发送的数据 --last 从上一次最后一次发送的那条数据开始 --since <duration> 从当前往前的时间段开始接收(例如:1s, 1hr, 具体可以参看:https://golang.org/pkg/time/#ParseDuration) --durable <name> 永久订阅者的名称 --unsubscribe 退出时解除永久订阅
附:命令备份
go env -w GO111MODULE=on #开启go mod管理,同理off就是关闭
开启之后,我们要import自己的包就会在go.mod路径下进行寻址
go.mod内容如下:
#这里的go.mod是使用go mod init xx生成的
module 05-go
go 1.17
安装gopls go get -v
运行nats的测试用例
进入测试用例目录 nats.go-main/examples
发布主题为foo的消息
go run nats-pub/main.go -s nats://127.0.0.1:4222 foo "msg one"
订阅主题为foo的消息
go run nats-sub/main.go -s nats://127.0.0.1:4222 -t foo
在 goland 中启动 nats-server
1、配置
2、启动
4、在命令行测试
开两个 cmd 窗口 A 和 B, 分别执行 telnet 10.60.80.11 4222
显示如下:
[D:\git\go\etcd]$ telnet 10.60.80.11 4222 Connecting to 10.60.80.11:4222... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. INFO {"server_id":"NDI3F7PI75QKRAY2MH2X6YAL7XVQDX6LWODFU5H5HBNM4LQSYSIF3V25",
"server_name":"NDI3F7PI75QKRAY2MH2X6YAL7XVQDX6LWODFU5H5HBNM4LQSYSIF3V25",
"version":"2.9.0-RC.3","proto":1,"go":"go1.18.4","host":"0.0.0.0","port":4222,"headers":true,
"max_payload":1048576,"client_id":4,"client_ip":"10.60.80.11"}
在A中订阅主题
sub topic001.* 89 +OK
在B中发布主题 ,注意这两行分两次输入, 发布主题为 topic001.uu ,内容长度为5 的主题,
再输入内容 hello, 此时在A中就显示主阅到
pub topic001.uu 5
hello
+OK
A中显示
sub topic001.* 89 +OK MSG topic001.uu 89 5 hello
ps:
为goland配置go sdk报错问题
低版本的goland还需要配置GOROOT,但是在配置go1.17以上的时候就一直报这个错误
Goland配置GOROOT报错:The selected directory is not a valid home for Go Sdk
原因goland版本过低,当go版本大于1.17时就会报此异常。
解决方案:
编辑自己go安装目录下的:go\src\runtime\internal\sys\zversion.go
增加一行自己的版本:
const TheVersion = `go1.18.4`