下载
go get -u -v github.com/apache/rocketmq-client-go/v2
初始化
type MqConf struct {
NameServers []string `mapstructure:"nameServers"`
}
var (
MqProducer rocketmq.Producer
MqPushConsumerSuccess rocketmq.PushConsumer
MqPushConsumerFail rocketmq.PushConsumer
MqPushConsumerDelay rocketmq.PushConsumer
)
const (
MqRetryTimes = 3
)
func InitMq(mqConf *MqConf) {
if mqConf == nil {
panic("mq config is nil")
return
}
var err error
MqProducer, err = rocketmq.NewProducer(
producer.WithGroupName("notify_producer"),
producer.WithNameServer(mqConf.NameServers),
producer.WithRetry(MqRetryTimes),
)
if err != nil {
panic(fmt.Sprintf("init rocket mq producer err:%v", err))
return
}
err = MqProducer.Start()
if err != nil {
panic(fmt.Sprintf("producer mq start err:%v", err))
return
}
MqPushConsumerSuccess, err = rocketmq.NewPushConsumer(
consumer.WithGroupName("notify_consumer_success"),
consumer.WithNameServer(mqConf.NameServers),
)
if err != nil {
panic(fmt.Sprintf("init rocket mq push consumer err:%v", err))
return
}
MqPushConsumerFail, err = rocketmq.NewPushConsumer(
consumer.WithGroupName("notify_consumer_fail"),
consumer.WithNameServer(mqConf.NameServers),
)
if err != nil {
panic(fmt.Sprintf("init rocket mq push consumer err:%v", err))
return
}
MqPushConsumerDelay, err = rocketmq.NewPushConsumer(
consumer.WithGroupName("notify_consumer_delay"),
consumer.WithNameServer(mqConf.NameServers),
)
if err != nil {
panic(fmt.Sprintf("init rocket mq push consumer err:%v", err))
return
}
}
func ShutDownMq() {
_ = MqProducer.Shutdown()
_ = MqPushConsumerSuccess.Shutdown()
_ = MqPushConsumerFail.Shutdown()
_ = MqPushConsumerDelay.Shutdown()
}
这里生产者只实例化了一个,然后可以启动了。
消费者如果是多个topic或者多个tag需要实例化多个
即:同一group下的所有消费者应该订阅的topic和tag都是相同的
同一group下的topic相同,但tag订阅不同也是不行的
否则会导致rebalance导致consumer只消费一部分