当前位置: 首页 > news >正文

【RabbitMQ】使用SpringAMQP的消息队列(Hello Word)和工作队列(Work Queue)

SpringAMQP

SpringAMQP中文文档

在这里插入图片描述

Hello Word

**案例1:**利用SpringAMQP实现HelloWord中的集成消息队列功能

项目结构,如图:

在这里插入图片描述

1.引入AMQP依赖(父工程中)

<!--AMQP依赖,包含RabbitMQ-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.publisher包的application.yml中添加MQ连接信息

logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.174.129 # rabbitMQ的ip地址(我是在虚拟机上用docker安装的RabbitMQ)port: 5672 # 端口virtual-host: / # 虚拟主机username: itcast # 用户名password: 123321 # 密码

3.在消息发送者(publisher包)中新建一个测试类SpringAmqpTest,编写测试方法

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate@Testpublic void testSimpleQueue(){String queueName ="simple.queue"; //队列名称String message ="hello, spring amgp!"; //消息rabbitTemplate.convertAndSend(queueName,message);}
}

4.运行,结果

在这里插入图片描述

5.在consumer中编写消费逻辑,监听simple.queue

5.1consumer包的application.yml中添加MQ连接信息
logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.174.129 # rabbitMQ的ip地址(我是在虚拟机上用docker安装的RabbitMQ)port: 5672 # 端口virtual-host: / # 虚拟主机username: itcast # 用户名password: 123321 # 密码
5.2在消费者(consumer包)新建一个类SpringRabbitListener,编写消费逻辑
@Component
public class SpringRabbitListener {@RabbitListener(queues="simple.queue")public void listenSimple0ueueMessage(String msg) throws InterruptedException {System.out.println("spring 消费者接收到消息 :【"+ msq +"】");}
}
5.3运行,结果

在这里插入图片描述

simple.queue队列中的消息也为空了

在这里插入图片描述

Work Queue

案例2:WorkQueue工作队列,实现一个队列绑定多个消费者

Work queue,工作队列,可以提高消息处理速度,避免队列消息堆积

在这里插入图片描述

前提:在案例1的基础上

1.在SpringAmqpTest添加新的发布

//消息发送50次 
@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); //休眠20秒}}

2.注释掉SpringRabbitListener上原有方法,添加新的消费

 @RabbitListener(queues = "simple.queue")public void listenWorkQueue1(String msg) throws InterruptedException {System.out.println("消费者1接收到消息:【" + msg + "】" + LocalTime.now());Thread.sleep(20);}@RabbitListener(queues = "simple.queue")public void listenWorkQueue2(String msg) throws InterruptedException {System.err.println("消费者2........接收到消息:【" + msg + "】" + LocalTime.now());Thread.sleep(200);}

3.运行,结果

在这里插入图片描述

结果为消费,平均分配

4.消费预取限制,能者多劳—在消费者(consumer包)的application.yml修改

logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.174.129 # rabbitMQ的ip地址port: 5672 # 端口username: itcastpassword: 123321virtual-host: /listener:simple:prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息

结果,如图:

在这里插入图片描述

http://www.lryc.cn/news/351138.html

相关文章:

  • 项目集成SkyWalking,基于k8s搭建
  • mysql-差异备份流程
  • 基于动态规划算法的DNA序列比对函数,给出两条序列(v和w)的打分矩阵
  • Tailwind CSS快速入门
  • Postman使用技巧
  • sqli-labs靶场
  • 基于springboot的大创管理系统
  • 常用torch.nn
  • 力扣226.翻转二叉树101.对称二叉树
  • word如何按照原本页面审阅文档
  • 前端基础入门三大核心之HTML篇:探索WebAssembly —— 开启网页高性能应用新时代
  • NDIS小端口驱动(四)
  • 用户态网络缓冲区设计
  • Linux运维工程师基础面试题整理(三)
  • 基于单片机与传感器技术的汽车起动线路设计
  • C#如何通过反射获取外部dll的函数
  • 从零开始傅里叶变换
  • 解决1万条数据前端渲染不卡的问题
  • 如何编写一个API——Python代码示例及拓展
  • UMPNet: Universal Manipulation Policy Network for Articulated Objects
  • 高通 Android 12/13冻结屏幕
  • C++实现图的存储和遍历
  • AI--构建检索增强生成 (RAG) 应用程序
  • QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP
  • 智慧社区管理系统:打造便捷、安全、和谐的新型社区生态
  • CustomTkinter:便捷美化Tkinter的UI界面(附模板)
  • 使用MicroPython和pyboard开发板(15):使用LCD和触摸传感器
  • c++20 std::jthread 源码简单赏析与应用
  • 自动化测试里的数据驱动和关键字驱动思路的理解
  • 【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细