• 简介
  • 核心组件目录
  • 支持驱动
  • 接口设计
  • 获取Queue对象

    简介

    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)