官方: https://github.com/apache/rocketmq-client-go
官方介绍
作用:
应用解耦、保证数据的最终一致性等等
简单示例:
延时同步发送消息
生产者:
package main
import (
"context"
"fmt"
"os"
"strconv"
"github.com/apache/rocketmq-client-go/v2"
"github.com/apache/rocketmq-client-go/v2/primitive"
"github.com/apache/rocketmq-client-go/v2/producer"
)
func main() {
p, _ := rocketmq.NewProducer(
producer.WithNsResolver(primitive.NewPassthroughResolver([]string{
"192.168.72.146:9876"})),
//指定重试次数
producer.WithRetry(2),
)
// 启动producer
err := p.Start()
if err != nil {
fmt.Printf("start producer error: %s", err.Error())
os.Exit(1)
}
topic := "test"
for i := 0; i < 10; i++ {
msg := &primitive.Message{
Topic: topic,
Body: []byte("路飞喜欢那美! " + strconv.Itoa(i)),
}
//指定标签
msg.WithTag("goudan")
msg.WithKeys([]string{
"iii"})
msg.WithProperty("name","micro services")
//参数是延时级别,共有16个级别 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
msg.WithDelayTimeLevel(3)
res, err := p.SendSync(context.Background(), msg)
if err != nil {
fmt.Printf("send message error: %s\n", err)
} else {
fmt.Printf("send message success: result=%s\n", res.String())
fmt.Println(res.MsgID)
}
}
//关闭
err = p.Shutdown()
if err != nil {
fmt.Printf("shutdown producer error: %s", err.Error())
}
}
消费者:
package main
import (
"context"
"fmt"
"os"
"time"
"github.com/apache/rocketmq-client-go/v2"
"github.com/apache/rocketmq-client-go/v2/consumer"