Golang与RabbitMQ实现多服务之间的异步通讯
要使用Golang与RabbitMQ实现多服务之间的异步通讯,你需要依照以下步骤进行操作:
github.com/streadway/amqp
,你可使用Go模块管理工具来导入该库。你可使用以下命令进行导入:go get github.com/streadway/amqp
package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
// 创建RabbitMQ连接
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatalf("Failed to connect to RabbitMQ: %v", err)
}
defer conn.Close()
// 程序继续履行...
}
// 创建一个名为"myqueue"的消息队列
ch, err := conn.Channel()
if err != nil {
log.Fatalf("Failed to open a channel: %v", err)
}
defer ch.Close()
q, err := ch.QueueDeclare(
"myqueue", // 队列名称
false, // 是否是持久化
false, // 是否是自动删除
false, // 是否是排他性队列
false, // 是否是等待服务器确认
nil, // 额外的属性
)
if err != nil {
log.Fatalf("Failed to declare a queue: %v", err)
}
// 程序继续履行...
// 发布一条消息到"myqueue"队列
body := []byte("Hello, RabbitMQ!")
err = ch.Publish(
"", // 交换机名称
q.Name, // 队列名称
false, // 是否是等待服务器确认
false, // 是否是强迫发布消息
amqp.Publishing{
ContentType: "text/plain",
Body: body,
})
if err != nil {
log.Fatalf("Failed to publish a message: %v", err)
}
// 创建一个消费者
msgs, err := ch.Consume(
q.Name, // 队列名称
"", // 消费者名称(留空表示随机生成名称)
true, // 是否是自动应对(即处理完消息后自动发送确认消息给RabbitMQ)
false, // 是否是排他性消费者
false, // 是否是等待服务器确认
false, // 额外的参数
)
if err != nil {
log.Fatalf("Failed to register a consumer: %v", err)
}
// 开始接收消息
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}()
// 程序继续履行...
以上就是使用Golang与RabbitMQ实现多服务之间的异步通讯的基本步骤。你可以根据实际需求进行调剂和扩大。
TOP