簡單使用 rocketmq

奇蹟師發表於2021-08-05

前言

需要包

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

1.簡單生產者

package main

import (
    "context"
    "fmt"
    "github.com/apache/rocketmq-client-go/v2"
    "github.com/apache/rocketmq-client-go/v2/primitive"
    "github.com/apache/rocketmq-client-go/v2/producer"
    "os"
    "strconv"
)

func main() {
    p, _ := rocketmq.NewProducer(
        // 設定  nameSrvAddr
        // nameSrvAddr 是 Topic 路由註冊中心
        producer.WithNameServer([]string{"127.0.0.1:9876"}),
        // 指定傳送失敗時的重試時間
        producer.WithRetry(2),
        // 設定 Group
        producer.WithGroupName("testGroup"),
    )
    // 開始連線
    err := p.Start()
    if err != nil {
        fmt.Printf("start producer error: %s", err.Error())
        os.Exit(1)
    }

    // 設定節點名稱
    topic := "Topic-test"
    // 循壞傳送資訊 (同步傳送)
    for i := 0; i < 10; i++ {
        msg := &primitive.Message{
            Topic: topic,
            Body:  []byte("Hello RocketMQ Go Client" + strconv.Itoa(i)),
        }
        // 傳送資訊
        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())
        }
    }
    // 關閉生產者
    err = p.Shutdown()
    if err != nil {
        fmt.Printf("shutdown producer error:%s",err.Error())
    }
}

2.簡單消費者

package main

import (
    "context"
    "fmt"
    "github.com/apache/rocketmq-client-go/v2"
    "github.com/apache/rocketmq-client-go/v2/consumer"
    "github.com/apache/rocketmq-client-go/v2/primitive"
    "os"
    "time"
)

func main() {
    // 設定推送消費者
    c, _ := rocketmq.NewPushConsumer(
        //消費組
        consumer.WithGroupName("testGroup"),
        // namesrv地址
        consumer.WithNameServer([]string{"127.0.0.1:9876"}),
        )
    // 必須先在 開始前
    err := c.Subscribe("Topic-test", consumer.MessageSelector{}, func(ctx context.Context, ext ...*primitive.MessageExt) (consumer.ConsumeResult, error) {
        for i := range ext {
            fmt.Printf("subscribe callback:%v \n", ext[i])
        }
        return consumer.ConsumeSuccess, nil
    })
    if err != nil {
        fmt.Println(err.Error())
    }
    err = c.Start()
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(-1)
    }
    time.Sleep(time.Hour)
    err = c.Shutdown()
    if err != nil {
        fmt.Printf("shutdown Consumer error:%s",err.Error())
    }
}

可能存在的問題

  1. 消費者先啟動,但是沒有建立 topic
    • 可以設定rocketmq預設建立節點
    • 可以通過admin 建立節點 參考地址

結語

  • 謝謝能看到最後
本作品採用《CC 協議》,轉載必須註明作者和本文連結