Golang RabbitMQ: 搭建可扩大的消息传递系统
要搭建一个可扩大的消息传递系统,可使用Golang和RabbitMQ的组合。RabbitMQ是一个功能强大的消息代理,用于在利用程序之间传递消息。
下面是搭建可扩大消息传递系统的步骤:
github.com/streadway/amqp
。package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatalf("Failed to connect to RabbitMQ: %v", err)
}
defer conn.Close()
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)
}
body := "Hello, RabbitMQ!"
err = ch.Publish(
"", // 交换机名称
q.Name, // routing key
false, // 是否是等待服务器响应
false, // 是否是立即发布
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
},
)
if err != nil {
log.Fatalf("Failed to publish a message: %v", err)
}
log.Println("Message published")
}
package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatalf("Failed to connect to RabbitMQ: %v", err)
}
defer conn.Close()
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)
}
msgs, err := ch.Consume(
q.Name, // 队列名称
"", // 消费者标识符
true, // 是否是自动应对
false, // 是否是排他消费者
false, // 是否是阻塞等待服务器响应
false, // 额外参数
)
if err != nil {
log.Fatalf("Failed to register a consumer: %v", err)
}
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}()
log.Println("Waiting for messages...")
<-forever
}
go run producer.go
go run consumer.go
生产者应
TOP