阅读 106

RabbitMQ Golang教程

RabbitMQ Golang教程

  • 首先,使用go get安装amqp

  • 1
    go get github.com/streadway/amqp

发送


我们将消息发布者(发送者)称为 send.go,将消息消费者(接收者)称为receive.go。发布者将连接到RabbitMQ,发送一条消息,然后退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package main
 
import (
    "github.com/streadway/amqp"
    "log"
)
 
func failOnError(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
    }
}
 
func main()  {
    conn,err := amqp.Dial("amqp://admin:admin@xx.xxx.xxx.xxx:5672/")
 
    failOnError(err,"Failed to connect to RabbitMQ")
    defer conn.Close()
 
    ch,err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()
 
    q, err := ch.QueueDeclare(
        "hello"// name
        false,   // durable
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
    )
    failOnError(err, "Failed to declare a queue")
 
    body := "Hello World!"
 
    err = ch.Publish(
        "",     // exchange
        q.Name, // routing key
        false,  // mandatory
        false,  // immediate
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        })
    failOnError(err, "Failed to publish a message")
    log.Printf(" [x] Sent %s", body)
}

  

接收


上面是我们的发布者。我们的消费者监听来自RabbitMQ的消息,因此与发布单个消息的发布者不同,我们将使消费者保持运行状态以监听消息并打印出来。

该代码(在receive.go中)具有与send相同的导入和帮助功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
 
import (
    "github.com/streadway/amqp"
    "log"
)
 
func failOnErrors(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
    }
}
 
func main()  {
    conn,err := amqp.Dial("amqp://admin:admin@xx.xxx.xxx.xxx:5672/")
    failOnErrors(err, "Failed to connect to RabbitMQ")
    defer conn.Close()
 
    ch, err := conn.Channel()
    failOnErrors(err, "Failed to open a channel")
    defer ch.Close()
 
    q, err := ch.QueueDeclare(
        "hello"// name
        false,   // durable
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
    )
    failOnErrors(err, "Failed to declare a queue")
 
    msgs, err := ch.Consume(
        q.Name, // queue
        "",     // consumer
        true,   // auto-ack
        false,  // exclusive
        false,  // no-local
        false,  // no-wait
        nil,    // args
    )
    failOnErrors(err, "Failed to register a consumer")
 
    forever := make(chan bool)
 
    go func() {
        for d := range msgs {
            log.Printf("Received a message: %s", d.Body)
        }
    }()
 
    log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
    <-forever
 
}


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐