RabbitMQ之Work Queue(工作队列)
创始人
2024-05-09 19:11:58
0

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前在某税务公司。本篇文章将记录和分享RabbitMQ工作队列相关的知识点。
本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬🤩🤩。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,曾经在某央企公司实习,目前在某税务公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

以下正文开始

在这里插入图片描述

工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。

相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。
在这里插入图片描述

多个消费者绑定到一个队列,同一条消息只会被一个消费者处理。

但是对于工作队列,可以提高消息的处理速度,避免队列中的消息堆积。

我们以一个例子来解释work queue工作队列。在生产者的服务中添加测试方法,通过循环的方式,向名为simple.queue队列中发送50条消息,代码和详细描述如下:

package cn.itcast.mq.spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSendMessage2WorkQueue() throws InterruptedException {String queueName="simple.queue";//队列名称String message = "hello, message_";//发送的消息for (int i=1;i<=50;i++){rabbitTemplate.convertAndSend(queueName,message+i);Thread.sleep(20);}}
}

在消费者的服务模块中,定义两个消息监听,分别为listenSimpleQueue1和listenSimpleQueue2,让它们都监听simple.queue队列,并且设置休眠时间,使得消费者1每秒处理50条消息,消费者2每秒处理10条消息。

package cn.itcast.mq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.time.LocalTime;
@Component
public class SpringRabbitListener {@RabbitListener(queues="simple.queue")public void listenSimpleQueue1(String msg) throws InterruptedException {System.out.println("消费者1已经接收到simple.queue的消息:[" + msg +  "]"+ LocalTime.now());Thread.sleep(20);}@RabbitListener(queues="simple.queue")public void listenSimpleQueue2(String msg) throws InterruptedException {System.err.println("消费者2已经接收到simple.queue的消息:[" + msg +  "]"+LocalTime.now());Thread.sleep(200);}
}

消费者的application.yaml文件,设置消费者每次只能获取一条消息,生产者和消费者的配置文件相似。

logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.220.13*port: 5672username: userpassword: ******virtual-host: /Listener:simple:prefetch: 1 #每次只能获取一条消息,处理完成才能获取下一条消息 控制消费者预取消息的上限

处理完成后,运行项目,可以得到消费者1和消费者2都能消费消息,并且可以根据休眠时间有序进行工作。
在这里插入图片描述
由于篇幅原因,下篇订阅模式比较长,所以本篇文章就先分享到这里了,后续会继续分享RabbitMQ订阅模式其他的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...