[Golang] mynats(对nats.go的二次封装)
0x0 前言
最近项目开始使用nats作为消息中间件。
nats的引入确实解决项目很多痛点。
比如:
1)服务动态横向扩展
2)负载均衡(nats的均衡机制只有随机,不过对我们来说也够用了)
3)多服务之间方便快捷的消息通信
0x1 mynats是什么
mynats是对nats.go的一个包装。目的是方便快捷的注册消息回掉,并且支持同步handler和异步handler。
0x2 特性
* 免去定义常量subject字符串的步骤,发送的proto参数类型名作为publish的subject,用handler的proto参数类型名作为subscribe的subject。并且依然支持通配符
* 避免发送参数类型和接受函数参数类型不匹配
* 可通知(无需返回的),可请求和回复
* 可同步请求可异步请求,可同步回复可异步回复
* 支持安全退出。安全退出会把异步处理完才退出
* 支持分组。方便用同一套nats服务器,业务逻辑分组互不影响
0x3 问题
* 运行时反射类型获得类型名,然后再拼接subject的性能
* 以类型作为subject,虽然解决容易不匹配的问题,单如果有公用类型就需要外面再包一层起其他的名字的类型