golang快速接入rocketmq 實現消息隊列業務


在web應用業務中,經常會遇到類似異步處理,秒殺,排隊等邏輯,這時利用消息隊列來完成這樣的功能是一個明智的選擇;

在業務規模較小的應用中我們可以使用redis中的list數據類型,在大規模業務中我們可以引入rocketmq等,尤其在業務重構時需要將原有的redis消息隊列實現改成rocketmq,為了保證既有業務不受影響,不引入新的BUG,是一件非常苦惱的事情;

今天就介紹一個包,可以方便的解決上述問題,他是 Orange框架 中的一個子包,他對常用的mq操作進行了封裝,即使沒有通過該框架開發也能直接使用該子包;

讓我們更多去關注業務本身,各種客戶端/sdk接入交給既有封裝即可;

 

准備工作:

1.搭建好rocketmq服務,啟動 mqnamesrv和至少1個mqbroker節點;

2.在 GOPATH 目錄下創建一個demo目錄並在目錄中創建一個main.go,寫入如下demo代碼

 

 
         
package main

import (
"gitee.com/zhucheer/orange/queue"
"time"
"fmt"
)

func main(){
// 注冊生產者 填入broker節點,group名稱,重試次數信息
mqProducerClient := queue.RegisterRocketProducerMust([]string{"192.168.137.100:9876"}, "test", 1)

// 注冊消費者 填入broker節點,group名稱信息
mqConsumerClient:= queue.RegisterRocketConsumerMust([]string{"192.168.137.100:9876"}, "test")

go func() {
for i:=0;i<10;i++{
// 向隊列發送一條消息 填入消息隊列topic和消息體信息
ret,_:=mqProducerClient.SendMsg("topicTest", "Hello mq~~")
fmt.Println("========producer push one message====", ret.MsgId)

time.Sleep(time.Second)
}

}()


// 執行消費者監聽 填入消息隊列topic
mqConsumerClient.ListenReceiveMsgDo("topicTest", func(mqMsg queue.MqMsg) {
// 收到一條消息
fmt.Println("receive====>",mqMsg.MsgId, mqMsg.BodyString())

})

time.Sleep(20*time.Second)

}

 

3.利用 go moduls 加載依賴並運行(需要開啟go moduls 或go1.13版本以上)

go mod init
go mod tidy
go run main.go

 

這樣我們就能看到該示例,每隔1s會生產一條消息並立刻消費了該消息

 

工具推介😏😏😏

如果我們直接使用了 Orange框架 來開發我們的web業務,那么體驗將會更加優雅;

因該包使用了面向接口的模式,我們能輕易的通過配置來對消息隊列驅動進行更改,能輕松的在redis和rocketmq直接進行切換。

如果有興趣可以查看詳細文檔:Orange框架#消息隊列文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM