我是靠谱客的博主 俏皮跳跳糖,最近开发中收集的这篇文章主要介绍gorabbitmq 笔记二 (确保消息成功发布到rabitmq),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 1. 确认消息成功发布到rabbitmq

SetConfirm函数
err :=  channel.Confirm(false)
if err != nil {
	log.Println("this.Channel.Confirm  ", err)
}
this.notifyConfirm = this.Channel.NotifyPublish(make(chan amqp.Confirmation))

这个函数会返回一个chan amqp.Confirmation的channel, 一般会把这个channel保存到自己实现的mq的结构体中,

type MQ struct {
    //这个channel就是conn.Channel()
	Channel *amqp.Channel   
    //确认发送到mq的channel
	notifyConfirm chan amqp.Confirmation
    //确认入列成功的channel
	notifyReturn  chan amqp.Return
}

确认消息监听函数, 启动一个协程,监听消息发送情况

func (this *MQ)ListenConfirm(){
    ret := <- this.notifyConfirm
    if ret.Ack{
	    log.Println("confirm:消息发送成功")
    } else{
        //这里表示消息发送到mq失败,可以处理失败流程
	    log.Println("confirm:消息发送失败")
    }
}

2. 确保消息入列成功

func (this *MQ)NotiryReturn(){
 	//前提需要设定Publish的mandatory为true
	this.notifyReturn=this.Channel.NotifyReturn(make(chan amqp.Return))
	go this.listenReturn() //使用协程执行
}

//消息是否正确入列
func (this *MQ)listenReturn(){
	ret:=<-this.notifyReturn
    //这里是OK使用延迟交换机, 如果没有使用延迟交换机去掉_, ok :=ret.Headers["x-delay"] 和 if中的ok
	_, ok :=ret.Headers["x-delay"]
	if string(ret.Body)!="" && !ok {
		log.Println("消息没有正确入列:", string(ret.Body))
	}
}

 

最后

以上就是俏皮跳跳糖为你收集整理的gorabbitmq 笔记二 (确保消息成功发布到rabitmq)的全部内容,希望文章能够帮你解决gorabbitmq 笔记二 (确保消息成功发布到rabitmq)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部