golang快速接入rocketmq 实现消息队列业务

Posted zhucheer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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框架#消息队列文档

 

以上是关于golang快速接入rocketmq 实现消息队列业务的主要内容,如果未能解决你的问题,请参考以下文章

饿了么:基于AMQP实现的golang消息队列MaxQ

rocketmq实现延时队列

开发者说:消息队列 Kafka 和 RocketMQ 之我见

3分钟快速入门RocketMQ(上)

Spring boot实战项目整合阿里云RocketMQ 消息队列实现发送普通消息,延时消息

Spring boot实战项目整合阿里云RocketMQ 消息队列实现发送普通消息,延时消息