rabbitmq相关使用

devtools/2025/1/18 12:37:39/

使用rabbitmq实现异步解耦

使用步骤:

1、pom依赖

java"><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2、yml配置文件

java">spring:rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtual-host: /

3、发送消息

java">/** 测试rabbitmq的使用* */
@Autowired
private RabbitTemplate rabbitTemplate;@RequestMapping("/send")
public boolean send(String message) {//现在我要阻塞5000ms/5秒钟// 如果代码写在控制层此时执行结果是5020毫秒   把一些耗时操作放在监听者中 异步解耦,接口可以先返回数据,避免接口响应时间过长try {Thread.sleep(5000);} catch (InterruptedException e) {throw new RuntimeException(e);}// 队列名称(一定要记得创建队列simple.queue  在FanoutConfig.class中)String queueName = "simple.queue";// 消息// 发送消息rabbitTemplate.convertAndSend(queueName, message);return true;
}

4、接受消息

java">package cn.xue.user.controller;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class SpringRabbitListener {@RabbitListener(queues = "simple.queue")public void listenSimpleQueueMessage(String msg) {//如果把一些耗时操作放到这里 rabbitmq会异步执行
//        try {
//            Thread.sleep(5000);
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);
//        }System.out.println("spring 消费者接收到消息:【" + msg + "】");}}

5、创建队列,必须有这个配置类,否则会报错

java">package cn.xue.user.controller;import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
*  创建队列
* */
@Configuration
public class FanoutConfig {/*** 创建第1个队列  simple.queue*/@Beanpublic Queue fanoutQueue1(){return new Queue("simple.queue");}}

结论

上面的  Thread.sleep(5000); 是为了模拟耗时操作

如果把  Thread.sleep(5000);写在send中,请看执行时长(5474ms)

如果把  Thread.sleep(5000);写在监听者中,请看执行时长(130ms)

 这样的话即实现了异步执行,也会减少代码之间的耦合度


http://www.ppmy.cn/devtools/146894.html

相关文章

Git的.gitignore文件详解与常见用法

诸神缄默不语-个人CSDN博文目录 在日常使用 Git 进行版本控制时&#xff0c;我们经常会遇到一些不需要被提交到远程仓库的文件&#xff08;例如日志文件、临时配置文件、环境变量文件等&#xff09;。为了忽略这些文件的提交&#xff0c;Git 提供了一个非常有用的功能&#xf…

Spring Cloud Alibaba2022之Sentinel总结

Spring Cloud Alibaba2022之Sentinel学习 Sentinel介绍 Sentinel是一个面向云原生微服务的流量控制、熔断降级组件。 Sentinel 分为两个部分&#xff1a; 核心库&#xff1a;&#xff08;Java 客户端&#xff09;不依赖任何框架/库&#xff0c;能够运行于所有 Java运行时环 …

VUE echarts 教程二 折线堆叠图

VUE echarts 教程一 折线图 import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option {title: {text: Stacked Line},tooltip: {trigger: axis},legend: {data: [Email, Union Ads, Video Ads, Dir…

stm32内部flash在线读写操作

stm32内部flash在线读写操作 &#x1f4cd;相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列&#xff0c;内部flash编程有所区别。例如stm32f1是按照页擦除&#xff0c;半字&#xff08;16bit&#xff09;或全字(32bit)数据写入&#xff1b;st…

# 【鸿蒙开发】多线程之Worker的使用

【鸿蒙开发】多线程之Worker的使用 文章目录 【鸿蒙开发】多线程之Worker的使用前言一、Worker的介绍二、注意事项三、Worker使用示例1.新建一个Worker2.主线程使用Worker3.子线程Worker的使用 四、效果展示 前言 本文主要介绍了多线程的方法之一&#xff0c;使用Worker开启多…

一起学Git【第七节:查看文件以及文件的删除】

1.查看当前git中的文件 1.1 ls ls 命令用于列出目录内容。 1.2 ls -a ls -a的作用是列出指定目录下的所有文件和子目录,包括以“.”开头的隐藏文件(默认情况下,ls 不会显示隐藏文件)。前三个文件是隐藏文件,正常情况下不会显示。 1.3 ls -ltr ls -ltr用于按照文件的修…

JavaFX FXML模式下的布局

常见布局方式概述 在 JavaFX FXML 模式下&#xff0c;有多种布局方式可供选择。这些布局方式可以帮助您有效地组织和排列 UI 组件&#xff0c;以创建出美观且功能良好的用户界面。常用布局容器及布局方式 BorderPane 布局 特点&#xff1a;BorderPane 将空间划分为五个区域&…

Python入门系列二-控制结构与函数

在Python编程中&#xff0c;控制程序流程的结构非常重要。通过合理使用条件判断语句、循环结构和函数&#xff0c;可以让程序更加高效和可维护。此外&#xff0c;理解局部变量和全局变量的概念也是编写清晰代码的重要一步。本文将详细介绍Python中的控制结构和函数机制&#xf…