概述
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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复