动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式

这篇具有很好参考价值的文章主要介绍了动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

12.RabbitMQ消息Confirm模式

12.1 Confirm模式简介

动力节点最新rabbitMQ视频
消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障;
动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式

12.2 具体代码设置

1 配置文件application.yml 开启确认模式:spring.rabbitmq.publisher-confirm-type=_correlated_2 写一个类实现implements RabbitTemplate.ConfirmCallback,判断成功和失败的ack结果,可以根据具体的结果,如果ack为false,对消息进行重新发送或记录日志等处理;设置rabbitTemplate的确认回调方法3 rabbitTemplate.setConfirmCallback(messageConfirmCallBack);

参考代码:

| @Component
public class MessageConfirmCallBack implements RabbitTemplate.ConfirmCallback {

/**
 * 交换机收到消息后,会回调该方法
 *
 * @param correlationData  相关联的数据
 * @param ack  有两个取值,true和false,true表示成功:消息正确地到达交换机,反之false就是消息没有正确地到达交换机
 * @param cause 消息没有正确地到达交换机的原因是什么
 */
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
    System.out.println("correlationData = " + correlationData);
    System.out.println("ack = " + ack);
    System.out.println("cause = " + cause);

    if (ack) {
        //正常
    } else {
        //不正常的,可能需要记日志或重新发送
    }
}
}

发消息参考代码

| @Service
public class MessageService {

@Resource
private RabbitTemplate rabbitTemplate;

@Resource
private MessageConfirmCallBack messageConfirmCallBack;

@PostConstruct //bean在初始化的时候,会调用一次该方法,只调用一次,起到初始化的作用
public void init() {
    rabbitTemplate.setConfirmCallback(messageConfirmCallBack);
}

/**
 * 发送消息
 */
public void sendMessage() {
    //关联数据对象
    CorrelationData correlationData = new CorrelationData();
    correlationData.setId("O159899323"); //比如设置一个订单ID,到时候在confirm回调里面,你就可以知道是哪个订单没有发送到交换机上去
    rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE + 123, "info", "hello", correlationData);
    System.out.println("消息发送完毕......");
}

}
|
| — |

两个示例:可以在发消息时直接实现接口

13. RabbitMQ消息Return模式

rabbitmq 整个消息投递的路径为:
producer —> exchange —> queue —> consumer

消息从 producer 到 exchange 则会返回一个 confirmCallback;
消息从 exchange –> queue 投递失败则会返回一个 returnCallback;

我们可以利用这两个callback控制消息的可靠性投递;
开启 确认模式;
使用rabbitTemplate.setConfirmCallback设置回调函数,当消息发送到exchange后回调confirm方法。在方法中判断ack,如果为true,则发送成功,如果为false,则发送失败,需要处理;

注意配置文件中,开启 退回模式;

spring.rabbitmq.publisher-returns: true

使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到
queue失败后,则会将消息退回给producer,并执行回调函数returnedMessage;

|
@Component
public class MessageReturnCallBack implements RabbitTemplate.ReturnsCallback {

/**
 * 当消息从交换机 没有正确地 到达队列,则会触发该方法
 * 如果消息从交换机 正确地 到达队列了,那么就不会触发该方法
 *
 * @param returned
 */
@Override
public void returnedMessage(ReturnedMessage returned) {
    System.out.println("消息return模式:" + returned);
}
}

参考发送代码

| @Service
public class MessageService {

@Resource
private RabbitTemplate rabbitTemplate;

@Resource
private MessageReturnCallBack messageReturnCallBack;

@PostConstruct //bean在初始化的时候,会调用一次该方法,只调用一次,起到初始化的作用
public void init() {
    rabbitTemplate.setReturnsCallback(messageReturnCallBack);
}

/**
 * 发送消息
 */
public void sendMessage() {
    rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE, "info123", "hello");
    System.out.println("消息发送完毕......");
}

}
|
| — |

代码二,发送消息时直接实现RabbitTemplate.ReturnsCallback

| @Servi文章来源地址https://www.toymoban.com/news/detail-427248.html

到了这里,关于动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动力节点Rabbitmq-18-21章RabbitMQ集群与高可用

    RabbitMQ 的集群分两种模式,一种是默认集群模式,一种是镜像集群模式; 在RabbitMQ集群中所有的节点(一个节点就是一个RabbitMQ的broker服务器) 被归为两类:一类是磁盘节点,一类是内存节点; 磁盘节点会把集群的所有信息(比如交换机、绑定、队列等信息)持久化到磁盘中

    2024年02月01日
    浏览(52)
  • 【RabbitMQ笔记10】消息队列RabbitMQ之死信队列的介绍

    这篇文章,主要介绍消息队列RabbitMQ之死信队列。 目录 一、RabbitMQ死信队列 1.1、什么是死信队列 1.2、设置过期时间TTL 1.3、配置死信交换机和死信队列(代码配置) (1)设置队列过期时间 (2)设置单条消息过期时间 (3)队列设置死信交换机 (4)配置的基本思路 1.4、配置

    2024年02月16日
    浏览(82)
  • RabbitMQ安装配置,笔记整理 RabbitMQ3.12.2版本安装配置

    官网下载 RabbitMQ 官方地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 下载时需注意Erlang Versions的版本  这里下载的是3.12.2  2. 安装依赖环境 在线安装依赖环境: yum   install   build-essential   openssl   openssl-devel   unixODBC   unixODBC-devel   make   gcc   gcc-c ++   kernel-d

    2024年02月12日
    浏览(40)
  • 【RabbitMQ笔记08】消息队列RabbitMQ之防止消息丢失的三种方式(生产者消息确认、消费者消息确认、消息持久化)

    这篇文章,主要介绍消息队列RabbitMQ之防止消息丢失的三种方式(生产者消息确认、消费者消息确认、消息持久化)。 目录 一、防止消息丢失 1.1、消息确认机制(生产者) (1)生产者丢失消息 (2)生产者消息确认机制 1.2、消息确认机制(消费者) (1)消费者丢失消息

    2024年02月02日
    浏览(51)
  • 【SpringBoot笔记29】SpringBoot集成RabbitMQ消息队列

    这篇文章,主要介绍SpringBoot如何集成RabbitMQ消息队列。 目录 一、集成RabbitMQ 1.1、引入amqp依赖 1.2、添加连接信息 1.3、添加RabbitMQ配置类

    2023年04月08日
    浏览(57)
  • node-red:使用node-red-contrib-amqp节点,实现与RabbitMQ服务器(AMQP)的消息传递

    回到目录   AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。    AMQP的主

    2024年02月03日
    浏览(39)
  • 消息中间件学习笔记--RabbitMQ(二、模式,一次违反常规的Java大厂面试经历

    .Fanout:转发消息到所有绑定队列 比较常用的是Direct、Topic、Fanout. Fanout 这种Fanout模式不处理路由键,只·需要简单的将队列绑定到exchange上,一个发送到exchange的消息都会被转发到与该exchange绑定的所有队列上。很像广播子网,每台子网内的主机都获得了一份复制的消息。Fan

    2024年04月09日
    浏览(99)
  • RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

    MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后消息发送上游只需要依赖MQ,不需要依赖其它服务。 功能1:流量消峰 功能2:应用解耦 功

    2024年02月07日
    浏览(54)
  • 【动力节点】springsecurity课程笔记6-13章

    ** csdn 密码泄露事件 泄露事件经过:https://www.williamlong.info/archives/2933.html 泄露数据分析:https://blog.csdn.net/crazyhacking/article/details/10443849 密码加密一般使用散列函数,又称散列算法,哈希函数,这些函数都是单向函数(从明文到密文,反之不行) 常用的散列算法有MD5和SHA Spri

    2023年04月21日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包