golang连接rabbitmq

chaselogs · · 3371 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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", // name
27         false,   // durable
28         false,   // delete when unused
29         false,   // exclusive
30         false,   // no-wait
31         nil,     // arguments
32     )
33     failOnError(err, "Failed to declare a queue")
34 
35     body := "Hello World!"
36     err = ch.Publish(
37         "",     // exchange
38         q.Name, // routing key
39         false,  // mandatory
40         false,  // immediate
41         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", // name
27         false,   // durable
28         false,   // delete when unused
29         false,   // exclusive
30         false,   // no-wait
31         nil,     // arguments
32     )
33     failOnError(err, "Failed to declare a queue")
34 
35     msgs, err := ch.Consume(
36         q.Name, // queue
37         "",     // consumer
38         true,   // auto-ack
39         false,  // exclusive
40         false,  // no-local
41         false,  // no-wait
42         nil,    // args
43     )
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     <-forever
56 }

 

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!

本文来自:博客园

感谢作者:chaselogs

查看原文:golang连接rabbitmq

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

3371 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
1 回复  |  直到 2019-06-04 15:05:46
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传