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设计笔记之:深度学习的编程模式比较
市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...
随机推荐
- jquery 添加列
{field:'action',title:'操作',width:70,align:'center', formatter:function(value,row,index){ if (row.e ...
- js正则表达式的使用详解
本文转自:http://www.jb51.net/article/39623.htm 1定义正则表达式2关于验证的三个这则表达式方法3正则表达式式的转义字符 1定义正则表达式在js中定义正则表达式很简 ...
- SNMP Introduction
Basic command of SNMP: GET: The GET operation is a request sent by the manager to the managed device ...
- LM358电流检测电路
----------------------------------------------------------------------------------------- ---------- ...
- python 输出两个日期之间的天数
from datetime import date f_date = date(, , ) l_date = date(, , ) delta = l_date - f_date print(delt ...
- mysql获取随机数据的方法
order by rand() 数据多了极慢,随机性非常好,适合非常小数据量的情况. 复制代码 代码如下: SELECT * FROM table_name AS r1 JOIN (SELECT (R ...
- hdu4565矩阵快速幂
这题太坑了...刚开始以为可以用|a+sqrt(b) 1|水过...结果tle,还一直想明明我logn的做法怎么可能tle.. | 0 1| 实在无奈看的题解 (a+sqr ...
- mongodb 之linux下安装、启动、停止、连接
今天在linux上面安装了mongodb 1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # ta ...
- 改变VO中的sql
cuxOptionVO.setFullSqlMode(cuxOptionVO.FULLSQL_MODE_AUGMENTATION); cuxOptionVO.setQuery(null); cuxOp ...
- HDU1102 最小生成树prim算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:给出任意两个城市之间建一条路的时间,给出哪些城市之间已经建好,问最少还要多少时间使所有的城 ...