Go项目中rocketMQ如何使用?

481 阅读1分钟

Go项目中rocketMQ如何使用?

rocketMQ 安装

go get github.com/apache/rocketmq-client-go/v2

初始化生产者

func InitMq()  {

    nameServer := global.Config.MustValue("mq", "NameServer")
    p, _ := rocketmq.NewProducer(
        producer.WithNsResolver(primitive.NewPassthroughResolver(strings.Split(nameServer,","))),
        producer.WithRetry(1),
    )
    p.Start()
    global.Mq = p
    rlog.SetLogLevel("error") // 定义错误信息才输出日志
}

初始化消费者

func initMq()  {
    topic := global.Config.MustValue("mq", "Topic")
    nameServer := global.Config.MustValue("mq", "NameServer")
    c, _ := rocketmq.NewPushConsumer(
        consumer.WithNsResolver(primitive.NewPassthroughResolver(strings.Split(nameServer,","))),
        consumer.WithConsumeFromWhere(consumer.ConsumeFromFirstOffset),
        consumer.WithConsumerModel(consumer.Clustering),// 消费模式:集群消费还是广播消费
        consumer.WithGroupName("group"),//消费组
    )
    c.Subscribe(topic, consumer.MessageSelector{}, func(ctx context.Context,
        msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) {
        for i := range msgs {
            itemSlice := make([]*service.SendItemMessage, 0)
            err := json.Unmarshal(msgs[i].Body,&itemSlice)
            if err == nil {
                service.SendItem(itemSlice)
            }
        }
        return consumer.ConsumeSuccess, nil
    })
    c.Start()
}

rocketMQ延迟消费

    topic := global.Config.MustValue("mq", "Topic")
    mes,_ := json.Marshal([]*service.SendItemMessage{item})
    global.Mq.SendAsync(context.Background(),
        func(ctx context.Context, result *primitive.SendResult, e error) {},
        msg := primitive.NewMessage(topic, mes))
        // msg.WithDelayTimeLevel(3) 设置延迟消息