[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