美文网首页
Golang使用RabbitMQ

Golang使用RabbitMQ

作者: 懒人程序猿 | 来源:发表于2020-05-21 13:07 被阅读0次

安装RabbitMQ
RabbitMQ中文相关文档:http://rabbitmq.mr-ping.com/
docker安装参考:https://www.jianshu.com/p/0a0d2315805a

# 拉取rabbitmq镜像,management是rabbitmq的web管理界面。不使用标签拉取是不带管理界面的
docker pull rabbitmq:management

# 启动rabbitmq容器,15672是web管理界面端口5672是rabbitmq端口
docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management

启动容器后,浏览器中访问http://127.0.0.1:15672来查看控制台信息
RabbitMQ默认的用户名:guest,密码:guest

image.png
RabbitMQ官方示例:https://www.rabbitmq.com/tutorials/tutorial-one-go.html
go代码
package rabbitmq

// 引入amqo包
import (
    "fmt"
    "github.com/streadway/amqp"
    "log"
)

const (
    LOGIN string = "guest"
    PASSWORD string = "guest"
    HOST string = "127.0.0.1"
    PORT string = "5672"
    VIRTUALHOST string = "/"
)

func Pushlish() {
    // 创建链接
    url := fmt.Sprintf("amqp://%s:%s@%s:%s%s", LOGIN, PASSWORD, HOST, PORT, VIRTUALHOST)
    conn, err := amqp.Dial(url)
    failOnError(err, "Failed to connect to RabbitMQ")
    defer conn.Close()
    // 打开一个通道
    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()
    // 生成一个交换机(交换机不存在的情况下)
    err = ch.ExchangeDeclare("excange_golang","direct", true,false,false, false, nil)
    failOnError(err, "Failed to declare an exchange")
    // 生成一个队列队列(队列不存在的情况下)
    _, err = ch.QueueDeclare("queue_golang", true, false, false, false, nil)
    failOnError(err, "Failed to declare an queue")
    // 列队与交换机绑定
    err = ch.QueueBind("queue_golang", "golang_routing_key", "excange_golang", false, nil)
    failOnError(err, "Bind queue to exchange failure")
    // 指定交换机发布消息
    err = ch.Publish("excange_golang", "golang_routing_key", false, false,
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte("hello golang rabbit"),
        })
    failOnError(err, "Message publish failure")
}

func Get() {
    // 创建链接
    url := fmt.Sprintf("amqp://%s:%s@%s:%s%s", LOGIN, PASSWORD, HOST, PORT, VIRTUALHOST)
    conn, err := amqp.Dial(url)
    failOnError(err, "Failed to connect to RabbitMQ")
    defer conn.Close()
    // 打开一个通道
    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()
    // 指定队列获取消息
    msg, ok, err := ch.Get("queue_golang", true)
    failOnError(err, "Message empty")
    fmt.Println(string(msg.Body), ok)
}

func failOnError(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
    }
}

测试

func main() {
    // rabbitmq
    rabbitmq.Pushlish()
    // rabbitmq.Get()
}

查看控制台


image.png
image.png

相关文章

网友评论

      本文标题:Golang使用RabbitMQ

      本文链接:https://www.haomeiwen.com/subject/auezohtx.html