• 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/

  • 相关阅读:
    jade -Template Engine
    GitHub 版本管理工具
    Bootstrap笔记
    网页布局笔记
    html,css的笔记
    Angular 实例项目 angular-phonecat 的一些问题
    sublime 浏览器快捷键配置
    Javascript 事件 笔记 1
    Bootstrap 学习笔记 一
    Codeforces 546 E:士兵的旅行 最大网络流
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9166948.html
Copyright © 2020-2023  润新知