简介

snow框架目前提供的队列组件,支持redis和alimns驱动,可根据各自需求和场景的不同进行切换。队列组件设计成支持多种驱动,原因主要如下:1、为保障服务高可用,其中一项驱动如果服务不稳定,可以切换成另一种,确保有backup,可以支持应急方案2、为了提升可扩展性,后续如果有场景需要kafka队列或者rabbitmq队列等,可以很方便的进行队列驱动扩展

核心组件目录

github.com/qit-team/snow-core/queue

支持驱动

目前已支持redis和alimns驱动,如RabbitMQ、kafka只需要实现如下接口即可。启动redis驱动需要再main入口引入驱动包

  1. # redis驱动包
  2. _ "github.com/qit-team/snow-core/queue/redisqueue"
  3. # alimns驱动包
  4. _ "github.com/qit-team/snow-core/queue/alimnsqueue"

接口设计

  1. type Queuer interface {
  2. //单入队
  3. Enqueue(ctx context.Context, key string, message string, args ...interface{}) (isOk bool, err error)
  4. //单出队: 消息不存在是返回空字符串
  5. Dequeue(ctx context.Context, key string) (message string, token string, err error)
  6. //确认接收消息redis用不到,alimns需要
  7. AckMsg(ctx context.Context, key string, token string) (isOk bool, err error)
  8. //单key批量入队
  9. BatchEnqueue(ctx context.Context, key string, messages []string, args ...interface{}) (isOk bool, err error)
  10. }

驱动程序只需要实现上述的Queue接口,即可作为队列驱动引入。同时在init函数中实现queue.Register(driverType, driver),可以实现插件式的扩展支持,可参考github.com/qit-team/snow-core/queue/redisqueue实现。

获取Queue对象

组件已经封装好了Queue的实现,只需要进行如下简单的调用即可获取到Queue对象,既可调用接口的方法

  1. # 第一个参数为依赖注入的别名,第二个参数为注入服务的驱动类型
  2. q, err := queue.GetQueue(redis.SingletonMain, queue.DriverTypeRedis)