[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,虽然解决容易不匹配的问题,单如果有公用类型就需要外面再包一层起其他的名字的类型
 

0x4 代码库

github:https://github.com/bailu1901/mynats

posted @ 2019-09-27 14:24  MrBlue  阅读(899)  评论(0编辑  收藏  举报