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/

 
 
 
 
非常感谢您的问题。关于您的问题,我可以为您提供一些信息和建议,但是我需要更多的上下文和细节,以便更好地理解您的需求。 首先,发布/订阅模式是一种常见的软件设计模式,用于在多个应用程序之间传递消息和通信。在这种模式中,有一个或多个发布者将消息发布到一个或多个主题,然后订阅者通过订阅特定主题来接收相关消息。这种模式通常用于异步和松散耦合的应用程序之间的通信。 针对您的问题,如果您想使用Lua语言搭建一个发布/订阅模式框架,您可以考虑使用LuaSocket库或LuaNATS库。 LuaSocket是一个Lua语言的网络支持库,它提供了Socket API的实现,并支持TCP和UDP协议。您可以使用它来实现发布/订阅模式的网络通信。具体来说,您可以使用Socket API中的socket()函数创建一个TCP或UDP套接字,然后使用bind()函数将套接字绑定到本地端口,再使用send()函数向主题发布消息,最后使用recv()函数从主题订阅消息。 而LuaNATS是一个Lua语言的NATS客户端库,它提供了对NATS协议的实现,可以方便地实现基于NATS的发布/订阅模式通信。具体来说,您可以使用LuaNATS提供的API创建一个连接到NATS服务器的客户端,并在客户端上订阅/取消订阅主题,然后通过客户端发送和接收主题消息。 除了这些库之外,还有许多其他的Lua语言库可以用于实现发布/订阅模式框架,具体选择取决于您的实际需求和环境。 希望这些信息和建议能为您提供一些帮助。如果您有任何其他问题或需要更多帮助,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值