Golang RabbitMQ: 使用协程建立多个通道 | 示例代码
以下是使用 Golang 和 RabbitMQ 库建立一个连接,并通过协程建立多个通道的示例代码:
package main
import (
"fmt"
"github.com/streadway/amqp"
"time"
)
const (
uri = "amqp://guest:guest@localhost:5672/"
)
func main() {
conn, err := amqp.Dial(uri)
if err != nil {
panic(err)
}
defer conn.Close()
// 创建多个协程并建立多个通道
for i := 1; i <= 5; i++ {
go func(i int) {
channel, err := conn.Channel()
if err != nil {
panic(err)
}
defer channel.Close()
queueName := fmt.Sprintf("queue%d", i)
queue, err := channel.QueueDeclare(queueName, true, false, false, false, nil)
if err != nil {
panic(err)
}
for {
message := fmt.Sprintf("Message from queue %s, time: %s", queueName, time.Now().Format("2006-01-02 15:04:05"))
err = channel.Publish("", queue.Name, false, false, amqp.Publishing{
ContentType: "text/plain",
Body: []byte(message),
})
if err != nil {
panic(err)
}
fmt.Println(message)
time.Sleep(time.Second)
}
}(i)
}
// 永久运行主线程,防止程序提前退出
select {}
}
这段代码使用 amqp 库连接到本地的 RabbitMQ 服务,并创建了 5 个协程和通道。每个协程都会创建一个队列,并且向该队列发送消息。消息包含队列名称和当前时间,以便在控制台输出时进行区分。每个协程都会在发送完一条消息后等待 1 秒钟,然后再次发送消息。
在主线程中,使用 select{} 使程序永久运行,以防止程序在协程运行时提前退出。
原文地址: https://www.cveoy.top/t/topic/lAey 著作权归作者所有。请勿转载和采集!