博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang连接rabbitmq
阅读量:5076 次
发布时间:2019-06-12

本文共 3095 字,大约阅读时间需要 10 分钟。

1.docke 中安装 rabbitmq

  docker pull rabbitmq

 

2.运行 rabbitmq

  docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:latest

 

3.下载 rabbitmq golang 客户端

  go get github.com/streadway/amqp

 

4.send.go

1 package main 2  3 import ( 4     "log" 5  6     "github.com/streadway/amqp" 7 ) 8  9 func failOnError(err error, msg string) {10     if err != nil {11         log.Fatalf("%s: %s", msg, err)12     }13 }14 15 // 只能在安装 rabbitmq 的服务器上操作16 func main() {17     conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")18     failOnError(err, "Failed to connect to RabbitMQ")19     defer conn.Close()20 21     ch, err := conn.Channel()22     failOnError(err, "Failed to open a channel")23     defer ch.Close()24 25     q, err := ch.QueueDeclare(26         "hello", // name27         false,   // durable28         false,   // delete when unused29         false,   // exclusive30         false,   // no-wait31         nil,     // arguments32     )33     failOnError(err, "Failed to declare a queue")34 35     body := "Hello World!"36     err = ch.Publish(37         "",     // exchange38         q.Name, // routing key39         false,  // mandatory40         false,  // immediate41         amqp.Publishing{42             ContentType: "text/plain",43             Body:        []byte(body),44         })45     log.Printf(" [x] Sent %s", body)46     failOnError(err, "Failed to publish a message")47 }

 

5.recv.go

1 package main 2  3 import ( 4     "log" 5  6     "github.com/streadway/amqp" 7 ) 8  9 func failOnError(err error, msg string) {10     if err != nil {11         log.Fatalf("%s: %s", msg, err)12     }13 }14 15 // 只能在安装 rabbitmq 的服务器上操作16 func main() {17     conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")18     failOnError(err, "Failed to connect to RabbitMQ")19     defer conn.Close()20 21     ch, err := conn.Channel()22     failOnError(err, "Failed to open a channel")23     defer ch.Close()24 25     q, err := ch.QueueDeclare(26         "hello", // name27         false,   // durable28         false,   // delete when unused29         false,   // exclusive30         false,   // no-wait31         nil,     // arguments32     )33     failOnError(err, "Failed to declare a queue")34 35     msgs, err := ch.Consume(36         q.Name, // queue37         "",     // consumer38         true,   // auto-ack39         false,  // exclusive40         false,  // no-local41         false,  // no-wait42         nil,    // args43     )44     failOnError(err, "Failed to register a consumer")45 46     forever := make(chan bool)47 48     go func() {49         for d := range msgs {50             log.Printf("Received a message: %s", d.Body)51         }52     }()53 54     log.Printf(" [*] Waiting for messages. To exit press CTRL+C")55     <-forever56 }

 

6.分别在在两个窗口执行   

  go run ./send.go

  2018/08/22 15:48:13  [x] Sent Hello World!

 

  go run ./recv.go

  2018/08/22 15:48:16 [*] Waiting for messages. To exit press CTRL+C

  2018/08/22 15:48:16 Received a message: Hello World!

转载于:https://www.cnblogs.com/chaselogs/p/9518440.html

你可能感兴趣的文章
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>