当前位置: 首页 > 网络应用技术

RabbitMQ实现了延迟队列的两种方法!

时间:2023-03-05 23:28:26 网络应用技术

  有多种类型的时序任务。常见的定时任务,例如日志备份。我们可能每天凌晨3点返回备份。这种固定的时间任务可以通过CRON表达式轻松实现。有一些特别的特价特殊特价。Cron不容易描述此计时任务,因为开始时间不确定,有时我们的开发中会遇到类似的需求。例如:

  在许多情况下,我们需要延迟队列。

  本文以RabbitMQ为例,与您讨论延迟队列。

  总体而言,有两种方法可以在RabbitMQ上实施定时任务:有两种方法:

  让我们看一下两种用法。

  首先,我们需要下载rabbitmq_delayed_message_exchange插件-in。这是GitHub上的开源项目。我们可以直接下载它:

  选择适合您的版本,我在此处选择最新版本3.9.0。

  下载完成后,执行以下命令将下载文件复制到Docker容器:

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

  接下来,将以下命令执行到RabbitMQ容器中:

  输入容器后,执行以下命令以启用插件-in:

  成功后,您还可以查看所有已安装的插头 - 以查看我们是否刚刚安装的插头,如下:

  命令的完整执行过程如下所示:

  好的,在配置完成后,我们执行命令以退出RabbitMQ容器。然后开始代码。

  接下来,启动消息并发送。

  首先,我们创建一个Spring Boot项目,介绍Web和RabbitMQ依赖项如下:如下:

  成功创建了项目后,在应用程序中配置了RabbitMQ的基本信息。

  接下来,提供兔子的配置类:

  这主要是因为开关的定义是不同的,朋友需要注意。

  我们在这里使用的开关是CustomeXchange。这是春季提供的开关。创建CustomeXchange时有五个参数。含义如下:

  在最后一个ARG参数中,指定了开关消息分布的类型。这种类型是每个人都知道的几种直接,粉丝,主题和标题的类型。在使用哪种类型中,将来将在将来会出现交换机分发消息。

  接下来,我们创建另一个消息消费者:

  只需打印消息内容即可。

  接下来,编写单元测试方法以发送消息:

  在消息标题中设置消息的延迟时间。

  好吧,然后启动Spring Boot项目,然后运行单元测试方法发送消息。最终的控制台打印日志如下:

  从日志延迟可以看出。

  延迟队列的想法也非常简单,即,我们提到的DLX(死信开关)+TTL(Newsout Time)的上一篇文章。

  我们可以将致命队列视为延迟队列。

  具体而言,这是:

  该消息进入了死信,因为它没有被消费者消耗。目前,我们有一个消费者在“蹲”的死字队列中。消息一进入死者队列,我们就立即被消耗掉了。

  这是延迟队列的实现。这很简单吗?

  接下来,通过简单的情况,Matsushita将通过简单的情况来演示延迟队列的特定实现。

  首先准备启动兔子。

  然后,我们创建一个Spring Boot项目来引入RabbitMQ依赖性:

  然后在应用程序中配置RabbitMQ的基本连接信息。Properties::

  接下来,我们将配置两个消息队列:一个普通队列,一个死信队列:

  尽管此配置代码稍长,但原理实际上很简单。

  接下来,我们为死信队列配置消费者,如下:

  收到消息后,打印出来。

  一切都结束了。

  启动项目。

  最后,我们在单元测试中发送一条消息:

  关于这一点没有什么可说的,即发送普通消息。10秒钟后,此消息将在致命队列的消费者中打印出来。

  好吧,这是我们使用RabbitMQ延迟队列的两个想法?感兴趣的朋友可以尝试一下?