Go语言封装RabbitMq操作

Go语言封装RabbitMq操作

发送端封装

1、建立发送端结构体

type SendRabbitMQ struct {
	conn *amqp.Connection
	ch *amqp.Channel
	q amqp.Queue
}

2、通过rabbitmq的地址和通道名称建立SendRabbitMQ对象
地址:amqp://guest:guest@localhost:5672/
通道名称: 任意值

func NewSendRabbitMQ(url string,queuename string) *SendRabbitMQ{
	mysend := new(SendRabbitMQ)
	var err error
	mysend.conn, err = amqp.Dial(url)
	cu.FailOnError(err, "Failed to connect to RabbitMQ")

	mysend.ch, err = mysend.conn.Channel()
	cu.FailOnError(err, "Failed to open a channel")

	mysend.q, err = mysend.ch.QueueDeclare(
		queuename, // name
		true,         // durable
		false,        // delete when unused
		false,        // exclusive
		false,        // no-wait
		nil,          // arguments
	)
	cu.FailOnError(err, "Failed to declare a queue")
	return mysend
}

3、发送字符串或其他数据

func (sr *SendRabbitMQ) SendData(Data string){
	var err error
	err = sr.ch.Publish(
		"",     // exchange
		sr.q.Name, // routing key
		false,  // mandatory
		false,
		amqp.Publishing{
			DeliveryMode: amqp.Persistent,
			ContentType:  "text/plain",
			Body:         []byte(Data),
		})
	cu.FailOnError(err, "Failed to publish a message")
	log.Printf(" [x] Sent %s", Data)
}

4、关闭连接

func (sr *SendRabbitMQ) Close(){
	sr.ch.Close()
	sr.conn.Close()
}

接收端封装

1、建立接收端结构体

type ReceiveRabbitMQ struct {
	conn *amqp.Connection
	ch *amqp.Channel
	q amqp.Queue
	msgchan <-chan amqp.Delivery
}

2、通过rabbitmq的地址和通道名称建立ReceiveRabbitMQ对象
地址:amqp://guest:guest@localhost:5672/
通道名称: 任意值

func NewReceiveRabbitMQ(url string,queuename string) *ReceiveRabbitMQ{
	myreceive := new(ReceiveRabbitMQ)
	var err error
	myreceive.conn, err = amqp.Dial(url)
	cu.FailOnError(err, "Failed to connect to RabbitMQ")

	myreceive.ch, err = myreceive.conn.Channel()
	cu.FailOnError(err, "Failed to open a channel")

	myreceive.q, err = myreceive.ch.QueueDeclare(
		queuename, // name
		true,         // durable
		false,        // delete when unused
		false,        // exclusive
		false,        // no-wait
		nil,          // arguments
	)
	cu.FailOnError(err, "Failed to declare a queue")

	err = myreceive.ch.Qos(
		1,     // prefetch count
		0,     // prefetch size
		false, // global
	)
	cu.FailOnError(err, "Failed to set QoS")

	myreceive.msgchan, err = myreceive.ch.Consume(
		myreceive.q.Name, // queue
		"",     // consumer
		false,  // auto-ack
		false,  // exclusive
		false,  // no-local
		false,  // no-wait
		nil,    // args
	)
	cu.FailOnError(err, "Failed to register a consumer")
	return myreceive
}

3、接收字符串或其他数据

func (rr *ReceiveRabbitMQ)ReceiveData(ServerMsg func(msg string)){
	forever := make(chan bool)

	go func() {
		for d := range rr.msgchan {
			ServerMsg(fmt.Sprintf("%s",d.Body))
			d.Ack(false)
		}
	}()

	log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
	<-forever
}

4、关闭连接

func (rr *ReceiveRabbitMQ)Close(){
	rr.ch.Close()
	rr.conn.Close()
}

附加

封装需要提前引入包
“github.com/streadway/amqp”
关于rabbitmq其他用法关注github

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值