nats 学习requestreply 模式基本使用

nats 学习requestreply 模式基本使用,第1张

nats 学习 request/reply 模式基本使用

nats 一个云原生的消息系统,使用简单,客户端丰富,支持的模式是pub/sub 但是集成比较灵活,可以支持loadblance, request/reply
pub/sub

代码演示的是request (类似rabbitmq 的rpc)

基本代码

需要首先安装并启动nats(比较简单)

  • request 端代码
package main

import (
"log" "runtime" "encoding/json"
"time" "github.com/nats-io/go-nats"
) func main() {
var url = "nats://127.0.0.1:4222"
nc, err := nats.Connect(url, nats.Name("dalongdemo"))
if err != nil {
log.Fatal("connect error")
}
nc.Subscribe("dalong", func(mess *nats.Msg) {
log.Println(string(mess.Data), "from nats")
result, _ := json.Marshal(mess)
log.Println("the reply info is ", string(result))
})
message, err := nc.Request("dalong", []byte("dalong"), 1*time.Second)
if err != nil {
log.Println("get error, timeout", err)
}
log.Println("get data", string(message.Data))
runtime.Goexit()
}
reply 端代码
package main

import (
"log" "runtime" "encoding/json" "github.com/nats-io/go-nats"
) func main() {
var url = "nats://127.0.0.1:4222"
nc, err := nats.Connect(url, nats.Name("dalongdemo"))
if err != nil {
log.Fatal("connect error")
}
nc.Subscribe("dalong", func(mess *nats.Msg) {
log.Println(string(mess.Data), "from nats")
result, _ := json.Marshal(mess)
log.Println("the reply info is ", string(result))
nc.Publish(mess.Reply, []byte("dalong can help you"))
})
runtime.Goexit()
}
运行效果

首先启动respone,然后是request

  • request 效果
  • response 效果
细节说明
  • 一张参考图
  • 说明
这种模式我们可以启动多个response 类似负载均衡的效果,和Queue 模式类似,还是比较方便的
参考资料

https://github.com/nats-io/go-nats
https://www.nats.io/documentation/concepts/nats-req-rep/

       

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/588850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存