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/
nats 学习 request/reply 模式基本使用的更多相关文章
- 跟着ZHONGHuan学习设计模式--桥接模式
转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...
- (@WhiteTaken)设计模式学习——享元模式
继续学习享元模式... 乍一看到享元的名字,一头雾水,学习了以后才觉得,这个名字确实比较适合这个模式. 享元,即共享对象的意思. 举个例子,如果制作一个五子棋的游戏,如果每次落子都实例化一个对象的话, ...
- Java设计模式学习记录-状态模式
前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...
- ActiveMQ实战篇之ActiveMQ实现request/reply模型(二)
ActiveMQ实战篇之ActiveMQ实现request/reply模型(二)
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- 《Head first设计模式》学习笔记 – 迭代器模式
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...
- 设计模式学习之代理模式(Proxy,结构型模式)(11)
参考地址:http://www.cnblogs.com/zhili/p/ProxyPattern.html 一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访 ...
- MXNet设计笔记之:深度学习的编程模式比较
市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...
随机推荐
- C# static的用法详解
C# static的用法详解 有的东西你天天在用,但未必就代表你真正了解它,正如我之前所了解的 static . 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 n ...
- python webdriver 显示等待-自动登录126邮箱,添加联系人
脚本内容:#encoding=utf-8#author-夏晓旭from selenium import webdriverimport timefrom selenium.webdriver.supp ...
- ansible之template模块
趁着最近在搞ansible,现在学习了一波template模块的用法: 1.使用template模块在jinja2中引用变量,先来目录结构树 [root@master ansible]# tree . ...
- sudo pm2 提示 找不到命令
一共有 3 台 staging 环境服务器,5 台生产环境服务器,centos7系统.前阵子刚给所有研发配置了自己的账号,今天有小伙伴说,在其中两台服务器上 sudo pm2 list 提示: sud ...
- linux内核分析第三周-跟踪分析Linux内核的启动过程
一.实验流程 1.打开环境 执行命令:cd LinuxKernel/ 执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd root ...
- Redis之数据备份与恢复
Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ...
- SQL 触发器的缺点 坏处 弊端 哼╭(╯^╰)╮
(自己总结,有误请不吝赐教) 1.如果触发频率高,占用内存,降低数据访问速度 2.相对不灵活,一旦触发马上执行,不能排除特殊情况 3.一定程度上打乱代码结构,相关的代码都需要特别注释,否则造成阅读和维 ...
- POJ 1833 排序
http://poj.org/problem?id=1833 题意: 给出一个排序,求出它之后的第k个排序. 思路: 排序原理: 1.如果全部为逆序时,说明已经全部排完了,此时回到1~n的排序. 2. ...
- SpringBoot在启动时的多环境配置以及加载顺序
通常我们在开发完成一个SpringBoot项目时,总是要打包部署的. 在启动SpringBoot应用时,我们常常会使用命令java -jar xxx.jar来启动这个服务. 命令java -jar 除 ...
- 递归--练习3--noi7592求最大公约数问题
递归--练习3--noi7592求最大公约数问题 一.心得 两个低级错误:1. ll setMax(ll &m,ll &n)中无引用,结果只传值,没传地址2. return f(n,m ...