简介
snow框架目前提供的队列组件,支持redis和alimns驱动,可根据各自需求和场景的不同进行切换。队列组件设计成支持多种驱动,原因主要如下:1、为保障服务高可用,其中一项驱动如果服务不稳定,可以切换成另一种,确保有backup,可以支持应急方案2、为了提升可扩展性,后续如果有场景需要kafka队列或者rabbitmq队列等,可以很方便的进行队列驱动扩展
核心组件目录
github.com/qit-team/snow-core/queue
支持驱动
目前已支持redis和alimns驱动,如RabbitMQ、kafka只需要实现如下接口即可。启动redis驱动需要再main入口引入驱动包
# redis驱动包
_ "github.com/qit-team/snow-core/queue/redisqueue"
# alimns驱动包
_ "github.com/qit-team/snow-core/queue/alimnsqueue"
接口设计
type Queuer interface {
//单入队
Enqueue(ctx context.Context, key string, message string, args ...interface{}) (isOk bool, err error)
//单出队: 消息不存在是返回空字符串
Dequeue(ctx context.Context, key string) (message string, token string, err error)
//确认接收消息redis用不到,alimns需要
AckMsg(ctx context.Context, key string, token string) (isOk bool, err error)
//单key批量入队
BatchEnqueue(ctx context.Context, key string, messages []string, args ...interface{}) (isOk bool, err error)
}
驱动程序只需要实现上述的Queue接口,即可作为队列驱动引入。同时在init函数中实现queue.Register(driverType, driver),可以实现插件式的扩展支持,可参考github.com/qit-team/snow-core/queue/redisqueue实现。
获取Queue对象
组件已经封装好了Queue的实现,只需要进行如下简单的调用即可获取到Queue对象,既可调用接口的方法
# 第一个参数为依赖注入的别名,第二个参数为注入服务的驱动类型
q, err := queue.GetQueue(redis.SingletonMain, queue.DriverTypeRedis)