RabbitMQ的消息Confirm模式与Return消息机制

同样我只是对自己学习做一个总结啊。。本人新手较菜嗯

消息确认模式

消息的确认,是指生产者投递消息给Broker后,如果Broker收到消息,则会给生产端一个回复(reply)。然后生产端便可以接收这个回复,从而可以确认你这条扔到Broker的消息正常到达了Broker。在这里插入图片描述
简单画了张图,大概就是这么个逻辑。
接下来看看实现。

确认消息机制的代码实现

//首先用channel开启确认模式
channel.confirmSelect();

//然后是通过channel添加一个确认监听器
channel.addConfirmListener(new ConfirmListener() {
	//监听到Broker发来了ack,即确认投递
    @Override
    public void handleAck(long deliveryTag, boolean multiple) throws IOException {
        System.out.println("--------ack!----------");
    }

	//监听非正常投递,即nack
    @Override
    public void handleNack(long deliveryTag, boolean multiple) throws IOException {
        System.out.println("-------no ack!--------");
    }
});

Return消息机制

Return Listener用于处理一些不可路由的消息
消息生产者通过指定一个Exchange和RoutingKey,把消息送到一个队列上去,然后消费者监听这个队列,进行消费处理操作。
发送消息的时候,当前的Exchange不存在或者指定的routingKey路由不到,这时需要监听不可到达的消息,即用到ReturnListener

这里要注意与confirm机制的区别,confirm机制是说你这条消息有没有正常地发到Broker上,而不是有没有正常路由。
在这里插入图片描述

代码实现:

//添加ReturnListener,要重载handleReturn方法
channel.addReturnListener(new ReturnListener() {
    @Override
    public void handleReturn(int replyCode, String replyText,
                             String exchange, String routingKey,
                             AMQP.BasicProperties properties,
                             byte[] body) throws IOException {
        System.out.println("------------handle return-------------");
        System.out.println("replyCode: "+replyCode);
        System.out.println("replyText: "+replyText);
        System.out.println("exchange: "+exchange);
        System.out.println("properties: "+properties);
        System.out.println("body: " + new String(body));
    }
});

//basicPublish使用有五个参数的重载函数,参数三设置为true,开启监听模式
channel.basicPublish(exchangeName,routingKey,true,null,
                "Hello Return Message".getBytes());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值