package main
import("fmt""log""sync""time""github.com/streadway/amqp")funcdeclareQueue(ch *amqp.Channel, queueName string)error{_, err := ch.QueueDeclare(
queueName,// namefalse,// durablefalse,// delete when unusedfalse,// exclusivefalse,// no-waitnil,// arguments)return err
}funcproducer(ch *amqp.Channel, wg *sync.WaitGroup, queueName string){defer wg.Done()for i :=1; i <=5; i++{
message := fmt.Sprintf("Message %d", i)
err := ch.Publish("",// exchange
queueName,// routing keyfalse,// mandatoryfalse,// immediate
amqp.Publishing{
ContentType:"text/plain",
Body:[]byte(message),})if err !=nil{
log.Fatalf("Failed to publish a message: %v", err)}
fmt.Printf("Sent: %s\n", message)
time.Sleep(time.Second)}}funcconsumer(ch *amqp.Channel, wg *sync.WaitGroup, queueName string){defer wg.Done()
msgs, err := ch.Consume(
queueName,// queue"",// consumertrue,// auto-ackfalse,// exclusivefalse,// no-localfalse,// no-waitnil,// args)if err !=nil{
log.Fatalf("Failed to register a consumer: %v", err)}for msg :=range msgs {
fmt.Printf("Received: %s\n", msg.Body)}}funcmain(){
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()
queueName :="your_queue_name"// Declare the queue before using it
err =declareQueue(ch, queueName)if err !=nil{
log.Fatalf("Failed to declare queue: %v", err)}var wg sync.WaitGroup
wg.Add(2)goproducer(ch,&wg, queueName)goconsumer(ch,&wg, queueName)
wg.Wait()}
运行结果
Sent: Message 1
Received: Message 1
Sent: Message 2
Received: Message 2
Sent: Message 3
Received: Message 3
Sent: Message 4
Received: Message 4
Sent: Message 5
Received: Message 5
本文转载自: https://blog.csdn.net/weixin_46529397/article/details/135210849
版权归原作者 别人家的孩子zyh 所有, 如有侵权,请联系我们删除。
版权归原作者 别人家的孩子zyh 所有, 如有侵权,请联系我们删除。