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) 设置延迟消息