栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

RabbitMQ(三)——延迟队列的两种实现方式(插件)、消息发送可靠性(两种思路、开启事务、发送方确认机制)、自带的重试机制(Spring自带、业务重试——发送失败重试、消费失败重试+幂等性处理)

RabbitMQ(三)——延迟队列的两种实现方式(插件)、消息发送可靠性(两种思路、开启事务、发送方确认机制)、自带的重试机制(Spring自带、业务重试——发送失败重试、消费失败重试+幂等性处理)

RabbitMQ(三)——延迟队列的两种实现方式(插件)、消息发送可靠性(两种思路、开启事务、发送方确认机制)、自带的重试机制(Spring自带、业务重试——发送失败重试、消费失败重试+幂等性处理) 一、延迟队列的两种实现方式

第一种方式在上篇博文中。

1、用插件 a、安装和使用

第二种方式就是使用插件:rabbitmq_delayed_message_exchange

首先我们需要下载 rabbitmq_delayed_message_exchange 插件,这是一个 GitHub 上的开源项目,我
们直接下载即可:

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

选择适合自己的版本,我这里选择最新的 3.9.0 版。
下载完成后在命令行执行如下命令将下载文件拷贝到 Docker 容器中去:

docker cp ./rabbitmq_delayed_message_exchange-3.9.0.ez some-rabbit:/plugins

这里第一个参数是宿主机上的文件地址,第二个参数是拷贝到容器的位置。

接下来再执行如下命令进入到 RabbitMQ 容器中:

docker exec -it some-rabbit /bin/bash

进入到容器之后,执行如下命令启用插件:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

启用成功之后,还可以通过如下命令查看所有安装的插件,看看是否有我们刚刚安装过的插件,如下:

rabbitmq-plugins list


有 E* 的就是安装的了

b、前期准备


c、代码实现


消费者:

接口:

效果:

可以看到,刚好 5 秒。

二、消息发送可靠性

只要确保消息到达队列了就算消息发送成功了。因为队列之后的事情不归我们管,是消费者的事情。

1、 确保消费成功的两种思路

如何确保消息成功到达 RabbitMQ?RabbitMQ 给出了两种方案:

    开启事务机制发送方确认机制

这是两种不同的方案,不可以同时开启,只能选择其中之一,如果两者同时开启,则会报如下错误:

2、开启事务机制(了解即可)

首先需要配置一个事务管理器, 发消息的时候配置一个事务就行。如果这个代码里面出错的话,就会回滚。通过加事务的方式确保这个消息发送成功。

a、代码实现

消息发送:

接口:

在消息发送那一块,通过加注解的方式开启事务,可以自行尝试故意出错,如果出错了这个消息会自动回滚。

消息发送使用了 @Transactional 注解,跟使用 mysql 的时候一样,因为 Spring 已经把事务的用法统一起来了。规则都是一样的。

b、为什么不选择事务方式

为什么事务模式了解就行呢?因为开启事务后会多了四个步骤:

3、发送方确认机制

再次强调,这种方式跟上面的事务方式不能共存,同时开启会报错:


a、代码实现

首先是 config 配置文件,先去掉事务管理:

其他都不变,再加点东西:

发送消息:

到这里代码就搞完了。

可以自行测试 交换机出问题或者队列出问题。比如直接注释掉交换机就行(在 send 方法里注释)。

4、自带的重试机制

失败重试分两种情况,一种是压根没找到 MQ 导致的失败重试(一般是没启动 MQ,或者网络问题)。
另一种是找到 MQ 了,但是消息发送失败了。

a、自带重试机制(Spring 自带,与 MQ 无关)

不仅是 MQ,其他地方也可使用。

b、业务重试



具体的业务重试看下一章!

三、业务重试 1、RabbitMQ 发送失败重试

未完待续…敬请期待

2、消费失败重试 + 幂等性处理
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号