使用RabbitMq实现延迟队列

news2024/10/7 20:36:56

下载RabbitMq:本地安装rabbitmq_王胖胖1112的博客-CSDN博客

1、pom文件引入

 <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit-test</artifactId>
        <scope>test</scope>
    </dependency>

 2、设置配置文件

spring:

        rabbitmq:

                host: IP地址 // 若在本地:127.0.0.1

                username: guest //默认的账号密码

                password: guest

                port: 5672

                virtual-host: / 

 3、使用延迟队列需要安装插件

一、进行地址下载插件:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

image-20210919180221637

二、将下载的文件放入rabbitMq目录下的plugins文件夹中

三、进入工作台,进入rabbitMq目录下的plugins目录下,执行:rabbitmq-plugins enable rabbitmq_delayed_message_exchange,开启插件支持

image-20210919180632012

四、重启rabbitMq

  1. net start RabbitMQ 启动

  2. net stop RabbitMQ 停止

五、到http://localhost:15672,查看交换机类型是否有x-delayed-message,有则成功了

image-20210919180805320

 4、配置文件类代码

@Configuration
public class MqConf {
 /**
 *死信交换机
 * */
public static final String DELAYED_EXCHANGE_NAME = "delayed.exchange";
/**
 *死信队列
 * */
public static final String DELAYED_QUEUE_NAME = "delayed.queue";
/**
 *死信路由
 * */
public static final String DELAYED_ROUTING_KEY = "delayed.routingKey";

/**

*定义死信队列

* */

@Bean("delayedQueue")
public Queue delayedQueue(){
    return new Queue(DELAYED_QUEUE_NAME);
}

/**

*定义死信交换机

* */

@Bean("delayedExchange")
public CustomExchange delayedExchange(){
    Map<String, Object> args = new HashMap<>(1);
    // 自定义交换机的类型
    args.put("x-delayed-type", "direct");
    return new CustomExchange(DELAYED_EXCHANGE_NAME, "x-delayed-message", true, false, args);
}

/**

*绑定

* */

@Bean
public Binding bindingDelayedQueue(@Qualifier("delayedQueue") Queue delayedQueue,
                                    @Qualifier("delayedExchange") CustomExchange delayedExchange){
    return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();
}
}

 5、消息生产者代码

@Slf4j
@RestController
@RequestMapping("/ttl")
public class TestController {
    @GetMapping("/sendDelayMsg/{message}/{delayTime}")
    public String sendMsg(@PathVariable String message, @PathVariable Integer delayTime){
            rabbitTemplate.convertAndSend(TtlQueueConfig.DELAYED_EXCHANGE_NAME, TtlQueueConfig.DELAYED_ROUTING_KEYA, message,                 messagePostProcessor ->{
                        messagePostProcessor.getMessageProperties().setDelay(delayTime);
                        return messagePostProcessor;
    });
    log.info("当前时间:{},发送一条延迟{}毫秒的信息给队列delay.queue:{}", new Date(), delayTime, message);

    return "发送成功";
    }
}

6、消息消费者代码 

@Slf4j
@Component
public class DeadLetterConsumer {
    @RabbitListener(queues = TtlQueueConfig.DELAYED_QUEUE_NAMEA)
    public void receiveD(String msg){
        log.info("当前时间{},队列收到死信队列的消息:{}", new Date(), msg);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我们没有办法正常使用cms了。如果你开通完cms带下面这个标识的话&#xff0c;就代表你是新版本&…

NVT | NVT SDK光敏电阻ADC配置与调试

NVT | NVT SDK光敏电阻ADC配置与调试 时间:2023-04-21 文章目录 `NVT` | `NVT` `SDK`光敏电阻`ADC`配置与调试1.参考2.电路原理图3.代码编写3-1.配置ADC通道3-2.初始化ADC3-3.ADC值读取3-4.ADC读取测试4.头文件1.参考 1.光敏电阻:原理及作用、符号及参数、选型及电路 2.

科技现代闪耀上海秀场 北京现代在上海车展上演转型之姿

4月18日&#xff0c;作为疫情后的第一个大型国际车展&#xff0c;第二十届上海国际汽车工业展览会盛况空前&#xff0c;新产品、新技术、新战略、新体验争先登台。作为合资企业的技术实力代表&#xff0c;北京现代不仅重磅发布了首款智能家居SUV车型MUFASA&#xff0c;并且以强…

微信小程序开发教程(二)--上传小程序

接上文,我们已经有一个小例子了。 在模拟器的位置,点击头像,会登录。 此时我们可以第一次尝试将我们的小程序进行上传。 点击下图箭头所指位置: 点击确定: 填写版本号和备注信息,选择上传: 在网页管理小程序上,选择上传,以下都选择红框所在位置:

多线段合并的两种方法:Cadance allegro与CAD交互

文章目录 问题引入Pe命令&#xff08;推荐&#xff09;block命令 问题引入 我们知道在Cadance allegro 中&#xff0c;涉及到板框文件和丝印层倒角的问题。而这些板框和丝印倒角的图形来自于CAD中的结构文件&#xff08;dxf文件&#xff09;&#xff0c;再导入到Cadance allegr…

人工智能︱AI数字人有什么用?

有了数字人&#xff0c;直播都不用亲自上阵了&#xff1f; 那咱随便捏个数字人放到直播间&#xff0c;是不是就能轻松把货卖出去啦&#xff1f; 虚拟数字人是AI技术的一种应用&#xff0c;我们先来看看它的定义&#xff1a; 虚拟数字人是通过计算机程序和人工智能技术创建的…

【Java 数据结构】包装类 (通俗易懂)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

粒子组件解析

1. GameObject → Create Other → Particle System。 2. 选中 Particle System&#xff0c;可看到下列屬性&#xff1a; 3.Particle System&#xff1a; Duration&#xff1a; 粒子发射时间(设定为5秒&#xff0c;每5秒发射一次粒子)。 Looping&#xff1a;是否循环产生粒子…

FE_CSS 元素的显示与隐藏

类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现&#xff01;本质&#xff1a;让一个元素在页面中隐藏或者显示出&#xff1a; display 显示隐藏visibility 显示隐藏overflow 溢出显示隐藏 1 display 属性用于设置一…

深入理解栈:从CPU和函数的视角看栈的管理、从栈切换的角度理解进程和协程

我们知道栈被操作系统安排在进程的高地址处&#xff0c;它是向下增长的。但这只是对栈相关知识的“浅尝辄止”。栈是每一个程序员都很熟悉的话题&#xff0c;但你敢说你真的完全了解它吗&#xff1f;我相信&#xff0c;你在工作中肯定遇到过栈溢出&#xff08;StackOverflow&am…

网工的四个等级,你在第几个?

网工的天花板有多高&#xff1f; 初级网工&#xff0c;月薪1万以内&#xff1b;高级网工&#xff0c;月薪2-3万&#xff1b;顶级网工&#xff0c;年薪百万不是梦。 对于大多数网工&#xff0c;需要完成的是从初级到高级的进阶。网工是靠技术吃饭的&#xff0c;对于众多在一线干…

Chapter10-NameServer 源码解析

10.1 模块人口代码的功能 10.1.1 入口函数 首先看一下 NameServer 的源码目录&#xff08;见图 10-1 &#xff09; 。NamesrvStartup 是模块的启动入 口&#xff0c; NamesrvController 是用来协块各个调模功能的代码。 我们从启动代码开始分析&#xff0c;找到 NamesrvStartup…

C++ 标准模板库(Standard Template Library,STL)

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

chatGPT工具

Cursor.so 是利用了chatgpt 4.0 api 的一个chatGPT工具。大约第一个月前我初次使用的时候&#xff0c;它在它的官网是这么申明的。这段时间&#xff0c;它的版本迭代速度很快&#xff0c;使用方式也和最初不一样了&#xff0c;按实际的来即可。现在是这样的&#xff0c;如下图&…

一文讲解内核模块依赖!

前言 不知大家有没有想过&#xff0c;在一个内核模块代码中&#xff0c;会用到printk函数&#xff0c;而这个函数不是我们实现的&#xff0c;它是内核代码的一部分&#xff0c;但我们为什么能够编译通过呢&#xff1f; 我们的代码之所以能够编译通过&#xff0c;是因为对模块…

Kubernetes安装

Kubernetes 也称为 K8s&#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统。 Kubernetes 核心能力&#xff1a; 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器&#xff0c;如果进入容器的流量很大&#xff0c; Kubernetes 可以负载…

艾瑞报告:预计2023年家用智能照明市场规模过百亿,Yeelight易来引领行业发展

照明是家居的主要部分&#xff0c;以智能化控制技术光环境设计为核心的智能照明成为智能家居重要的子系统与子应用&#xff0c;智能照明通过精准的设计&#xff0c;将单品链接成系统&#xff0c;通过算法和云平台实现智能化&#xff0c;针对不同的空间适配不同的灯光&#xff0…

使用注解存储Bean对象

日升时奋斗&#xff0c;日落时自省 目录 1、存储Bean对象 1.1、五大类注解 1.2、添加注解存储Bean对象&#xff08;Controller&#xff09; 1.3、Bean的命名规则 1.4、其他类注解演示 1.5、为什么需要五大类注解 1.5.1、JavaEE标准分层 1.5.2、实例分层结构 1.5.3、分…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用

目前&#xff0c;Earth Engine上包含超过900个公共数据集&#xff0c;每月新增约2 PB数据&#xff0c;总容量超过80PB。与传统的处理影像工具&#xff08;例如ENVI&#xff09;相比&#xff0c;Earth Engine在处理海量遥感数据方面具有不可比拟的优势。一方面&#xff0c;它提供…

【Linux】线程同步分析:什么是条件变量?生产者消费者模型是什么?POSIX信号量怎么用?阻塞队列和环形队列模拟生产者消费者模型

上一篇文章我们分析了什么是线程互斥, 以及线程互斥的特点和使用. 说白了, 线程互斥就是多线程在争抢使用临界资源, 谁抢到了谁就用, 抢不到的就等. 这样不会因为多线程同时访问临界资源而造成错误. 虽然没有错误, 但是, 思考另外一个问题&#xff1a;这样合理吗&#xff1f…