go rabbitMq入门

本文介绍了RabbitMQ的基本使用,包括队列声明(是否持久化、自动删除、排他、等待响应等参数),消息发布(交换器、路由键、强制、立即发送等选项)和消息消费(自动确认、排他、非本地化、等待响应等特性)。通过示例代码展示了如何在Go中连接RabbitMQ并实现发送和接收消息。
摘要由CSDN通过智能技术生成

必要参数说明

func (ch *Channel) QueueDeclare(name string, durable, autoDelete, exclusive, noWait bool, args Table)

  1. name:队列名称
  2. durable:是否持久化,默认false放内存(即重启会丢失)
  3. autoDelete:队列中数据消费完成后是否自动删除队列(最后一个消费者断开连接后自动删除)
  4. exclusive:是否排外的,有两个作用(1、connection.close()该队列是否会自动删除;2、该队列是否是私有的private)一般等于true的时适用于一个队列只能一个消费者
  5. noWait:是否等待服务器返回
  6. args:相关参数,一般为nil

func (ch *Channel) Publish(exchange, key string, mandatory, immediate bool, msg Publishing)

  1. exchange: 交换器
  2. routing key:队列名称
  3. mandatory:是否强制
  4. immediate:是否立即发送
  5. msg:消息

func (ch *Channel) Consume(queue, consumer string, autoAck, exclusive, noLocal, noWait bool, args Table)

  1. queue:队列名称
  2. autoAck:自动确认应答,建议设为false
  3. exclusive: 排他
  4. noLocal:非本地化,设置为true则表示不能将同一个Connection中生产者发送的消息传送给这个Connection中的消费者
  5. noWait:等待
  6. args:相关参数,一般为nil

入门示例:

安装扩展 go get github.com/streadway/amqp
接收文件receive.go

package main

import (
   "log"

   "github.com/streadway/amqp"
)

func main() {
   conn, err := amqp.Dial("amqp://guest:guest@localhost: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 usused
   	false,   // exclusive
   	false,   // no-wait
   	nil,     // arguments
   )
   failOnError(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
   )
   failOnError(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
}

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

发送文件send.go

package main

import (
	"log"

	"github.com/streadway/amqp"
)

func main() {
	conn, err := amqp.Dial("amqp://guest:guest@localhost: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")
}

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

分别运行go run send.gogo run receive.go
结果如下:

$ go run send.go

$ go run receive.go
2021/10/29 16:50:48  [*] Waiting for messages. To exit press CTRL+C
2021/10/29 16:50:48 Received a message: Hello World!
# Hello World为发送的消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值