博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go使用rabbitmq 实践
阅读量:729 次
发布时间:2019-03-21

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

1、 使用docker-compose编排rabbitmq

vim docker-compose.yml
version: '3'services:  rabbitmq:    image: rabbitmq:management    container_name: rabbitmq    restart: always    hostname: myRabbitmq    ports:      - ${MANAGEMENT_PORT}:15672      - ${RABBITMQ_PORT}:5672    volumes:      - ${RABBITMQ_DATA_FILE}:/var/lib/rabbitmq    environment:      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
vim .env
## rabbitmq#RABBITMQ_PORT=5672MANAGEMENT_PORT=15672RABBITMQ_DATA_FILE=./dataRABBITMQ_DEFAULT_USER=rootRABBITMQ_DEFAULT_PASS=root
docker-compose up -d
  • 访问

添加vhosts

  • 如图所示
    在这里插入图片描述

创建go项目

  • 目录结构如下
    在这里插入图片描述
go get github.com/streadway/amqp
  • send.go内容如下
package mainimport (	"fmt"	"github.com/streadway/amqp"	"log")func main() {	// 连接RabbitMQ服务器	conn, err := amqp.Dial("amqp://test:test@127.0.0.1:5672//test")	failOnError(err, "Failed to connect to RabbitMQ")	defer conn.Close()	// 创建一个channel	ch, err := conn.Channel()	failOnError(err, "Failed to open a channel")	defer ch.Close()	// 声明一个队列	q, err := ch.QueueDeclare(		"test", // 队列名称		false,   // 是否持久化		false,   // 是否自动删除		false,   // 是否独立		false, nil,	)	failOnError(err, "Failed to declare a queue")	// 发送消息到队列中	body := "你好"	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")	fmt.Println("send message success\n")}// 帮助函数检测每一个amqp调用func failOnError(err error, msg string) {	if err != nil {		log.Fatalf("%s: %s", msg, err)	}}
  • receive.go内容如下
package mainimport (	"fmt"	"github.com/streadway/amqp"	"log")func main() {	// 连接RabbitMQ服务器	conn, err := amqp.Dial("amqp://test:test@127.0.0.1:5672//test")	failOnError(err, "Failed to connect to RabbitMQ")	defer conn.Close()	// 创建一个channel	ch, err := conn.Channel()	failOnError(err, "Failed to open a channel")	defer ch.Close()	// 声明一个队列	q, err := ch.QueueDeclare(		"test", // 队列名称		false,   // 是否持久化		false,   // 是否自动删除		false,   // 是否独立		false, nil,	)	failOnError(err, "Failed to declare a queue")	// 发送消息到队列中	body := "你好"	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")	fmt.Println("send message success\n")}// 帮助函数检测每一个amqp调用func failOnError(err error, msg string) {	if err != nil {		log.Fatalf("%s: %s", msg, err)	}}

测试

go build receive.go
go build send.go

在这里插入图片描述

在这里插入图片描述

转载地址:http://cyugz.baihongyu.com/

你可能感兴趣的文章