RabbitMQ延迟插件【安装windows/Linux(Docker)】

6 篇文章 0 订阅
订阅专栏

问题:RabbitMq为什么要单独装一个延迟插件?

答案:

死信队列:就是正常消费者在一定时间内没有进行消费的消息会发送到死信队列中,而会有消费者在监听死信队列。消费者在消息被拒绝、消息TTL过期、队列达到最大长度这三种情况下,消息会被消费者转发到死信队列。

延迟队列:其实就是死信队列中消息过期的特殊情况

延迟队列应用场景:

死信队列实现:在以上场景中,就可能需要在RabbitMq中有多个不同过期时间的需求,在这种情况下通过死信队列可以初步实现如下:在定义队列时并不设施固定的消息过期时间,而在生产者发送消息时,将过期时间作为参数传递到队列中,这样就可以实现多种不同过期时间的需求。

 对于以上方法存在一个问题:死信队列这种多个过期时间共存的情况下如果过期时间长短刚好设置从小到大的添加顺序时,可能没有问题,但是这在实际应用中不可能的。假设第一个过期时间为20s,第二个过期时间为2s,这种情况下就会出现2s之后第二条消息并不会执行到期的操作,而会等到第一条的过期时间到了之后才会执行,这样在实际业务中就会出问题。原因如下:

 综上所述:就需要安装RabbitMq的延迟插件,新增一种交换机的模式来解决这个问题!

下载过程:

1、首先一定一定一定要确定好自己的RabbitMq的版本是多少,这很重要,然后再官网打开下载即可。如果你的rabbitmq版本是3.7.x,那就下载v3.8x版本即可,下载连接:https://www.rabbitmq.com/community-plugins.html

安装过程(Windows)

1、将.ez压缩包放到rabbitmq的plugins目录中\RabbitMQ Server\rabbitmq_server-3.7.7\plugins

2、进入sbin目录,打开管理员控制台,输入如下命令,显示类似信息即可:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

 3、重新双击sbin目录下的rabbitmq-server.bat文件,启动rabbitmq服务。

注意:如果前面下载的插件版本和rabbitmq版本不匹配,就会导致无法启动,出现闪退或者显示BOOT FAILED,删掉刚才的插件,重新执行上面流程即可。

4、启动服务之后打开rabbitmq管理官新增交换机即可看到新的交换模式。

安装过程(Linux【Docker】)

前置条件是在Docker中部署过RabbitMq。

1、打开你的远程工具,首先查看docker中已有的容器,主要是为了查看rabbitmq的容器ID

2、将本地下载好的压缩包传到服务器某文件夹下,然后将其复制到Docker中的RabbitMq容器中的plugins文件夹下。

docker cp /home/rabbitmq_delayed_message_exchange-3.8.0.ez a687ef46141b:/plugins

3、进入容器查看该目录下是否有该压缩包。

进入容器命令:(通过容器号或者容器名)

docker exec -it a687ef46141b bash

4、同样在容器中的命令行执行一下命令添加插件。

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

5、退出容器,重启该容器。

6、在管理端即同样可以看到新增了一种交换机模式。

总结:以上就是RabbitMQ的延迟插件的安装过程!

基于插件的延迟队列DEMO

成功安装RabbitMQ的延迟插件之后,我们就可以尝试写一个延迟队列来验证一下是否可以解决上述问题。

首先我们的测试环境是在一个Springboot的框架下完成!

1、最先写配置类

/**
 * 定义延迟交换机
 */
@Configuration
public class RabbitMQDelayedConfig {
    //队列
    private static final String DELAYQUEUE = "delayedqueue";
    //交换机
    private static final String DELAYEXCHANGE = "delayedExchange";
    @Bean
    public Queue delayqueue(){return new Queue(DELAYQUEUE);}
    //自定义延迟交换机
    @Bean
    public CustomExchange delayedExchange(){
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-delayed-type","direct");
        /**
         * 1、交换机名称
         * 2、交换机类型
         * 3、是否需要持久化
         * 4、是否需要自动删除
         * 5、其他参数
         */
        return new CustomExchange(DELAYEXCHANGE,"x-delayed-message",true,false,arguments);
    }
    //绑定队列和延迟交换机
    @Bean
    public Binding delaybinding(){
        return BindingBuilder.bind(delayqueue()).to(delayedExchange()).with("sectest").noargs();
    }
}

2、先写生产者

/**
 * 基于插件的延迟队列
 * 消息生产者
 */
@Service
@Slf4j
public class DelayMQSender {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendmsg(String message,Integer delaytime){
        log.info("当前时间:{},发送时长{}信息给延迟队列:{}",new Date().toString(),delaytime,message);
        rabbitTemplate.convertAndSend("delayedExchange","sectest",message,msg->{
            //设置发送消息的延长时间 单位:ms
            msg.getMessageProperties().setDelay(delaytime);
            return msg;
        });
    }
}

3、再写消费者

/**
 * 基于插件的延迟队列
 * 消息的消费者
 */
@Service
@Slf4j
public class DelayMQReceiver {
    @RabbitListener(queues = "delayedqueue")
    public void receivemsg(Message messages){
        String msg = new String(messages.getBody());
        log.info("当前时间:{},接收时长信息给延迟队列:{}",new Date().toString(),msg);
    }
}

4、进行测试

将模拟请求放在了一个简易的网页上,点击后输出如下结果,证明当先发送了20s延时的消息,再发送2s延时的消息,在2s后消息正常被消费,基于插件的延迟队列完美解决了问题。

【思考】:如果在实际业务场景中使用延迟队列的话,那就需要服务端在消息被消费之后主动告诉前端消费的结果,如果是这样的话,那么Ajxs的通信方式是单双工通信,只能前端主动访问后端并返回结果,后端无法主动发送消息,应该使用Websocket来进行通信才可,websocket是长连接,不同于http的短连接,可以实现全双工通信,前后端都可以主动发送消息。

RabbitMQ实现延迟消息居然如此简单,整个件就完事了
m0_63437643的博客
08-23 233
** * 消息队列配置 * Created by macro on 2018/9/14. */ @Configuration public class RabbitMqConfig { /** * 订单延迟件消息队列所绑定的交换机 */ @Bean CustomExchange orderPluginDirect() { //创建一个自定义交换机,可以发送延迟消息 Map args = new HashMap();
rabbitmq 安装延时队列件(死信队列)
qq_29520895的博客
10-10 618
延时消息
2024年最全使用JMeter安装RabbitMQ测试件的步骤_rabbitmq 测试工具,2024年最新农民工看完都会了
2401_84790808的博客
05-06 457
RabbitMQ客户端件amqp-client-3.4.4.jar下载,件下载地址https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/3.4.4/amqp-client-3.4.4.jar。注意:有时打包不成功,提示下载ivy.jar包到指定目录失败,是需要配置代理的,为了减少麻烦,可手动直接下载下来放到ivy目录下(没有ivy目录手动创建目录),并修改ivy-2.5.0.jar文件名为ivy.jar。4、修改AMQP件的配置文件。
RabbitMQ延迟队列实现 ( 件版 )
想好了就去做吧 即便失败了 至少这条路上留下了你的脚印
07-12 3771
安装rabbitmq-delayed-message-exchange件后,会生成一个新的Exchange类型 x-delayed-message ,该类型消息支持延迟投递机制。接收到消息后并不会立即将消息投递至目标队列,而是存储在mnesia table(一个分布式数据库)中,然后检测消息延迟时间,如果达到可投递时间( 过期时间 )后,将其通过 x-delayed-type 类型标记的交换机投递到目标队列中。...
docker 安装 rabbitMQ 延时队列件(delayed_message_exchange)
chenthe1的专栏
03-12 283
docker 安装 rabbitMQ 延时队列件(delayed_message_exchange)3. 拷贝件文件到 rabbitMQDocker 容器中。1. 查找 Docker 容器中的 RabbitMQ 镜像。4. 进入 rabbitMQDocker 容器中。件到 Linux 文件夹中。
RabbitMQ延迟
04-11
rabbitmq_delayed_message_exchange-3.8.0
RabbitMQ 延迟
06-19
Rabbitmq 延迟rabbitmq_delayed_message_exchange-20171215-3.6.x,注意适用于3.5.8 及其以后的版本
docker安装rabbitmq3.8集群-3台-详细笔记文档-带安装
07-16
docker安装rabbitmq3.8集群-3台-详细笔记文档-带安装
RabbitMQ延迟消息件.zip
07-11
1. 安装件:首先需要将下载的件解压,并在RabbitMQ服务器上启用。这通常通过执行`rabbitmq-plugins enable rabbitmq_delayed_message_exchange`命令完成。 2. 创建交换机:然后,在RabbitMQ管理控制台或者使用...
rabbitMQ延迟消息
最新发布
05-23
rabbitMQ延迟消息
RabbitMQ延时
qq_37487520的博客
07-31 1801
RabbitMQ延时消息
windows 下面基于 Docker安装RabbitMQ以及安装延迟队列rabbitmq-delayed-message-exchange
qq_35799260的博客
09-20 2240
windows 下面基于 Docker安装RabbitMQ
RabbitMQ使用延迟件,代码量直接减少一半!
m0_71777195的博客
01-09 455
今天介绍一下使用RabbitMQ延迟件方便实现延迟消息的方案。RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议) 的开源实现。RabbitMQ 是轻量级且易于部署的,能支持多种消息协议。RabbitMQ 可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。具体特点包括:可靠性(Reliability):RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布 确认。
windowsrabbitmq安装延时件(处理各种问题)
qq_51269815的博客
09-01 1706
windowsrabbitmq安装延时件(处理各种问题)
rabbitmq plugins rabbitmq_delayed_message_exchange消息队列延迟消息
偶爱喝可乐
09-08 8261
RabbitMQ实现延迟消息传递的方法
RabbitMQ案例七之延时任务
坛子成长记
12-08 2910
环境要求 Github:  https://github.com/rabbitmq/rabbitmq-delayed-message-exchange  Rabbitmq版本要求: RabbitMQ 3.5.7 and later versions.  Erlang版本要求: Erlang/OTP 18.0 and later versions  件列表:  http://www
docker安装RabbitMQ延迟队列
magic_1024的博客
01-05 7827
Docker环境下安装RabbitMQ延迟队列
Linuxrabbitmq安装rabbitmq_delayed_message_exchange
Lemon_MY的博客
02-01 1340
下载件下载地址:https://dl.bintray.com/rabbitmq/community-plugins/ 根据rabbitmq的版本下载对应的rabbitmq_delayed_message_exchange件,注意3.6.X中的rabbitmq_delayed_message_exchange件不能在3.6.5版本的rabbitmq中使用,可以在3.6.6版本的rabbitmq中使用(亲测!!!)。 安装件为zip格式,需要进行解压: unzip rabbitmq_dela
rabbitmq 延迟安装
08-30
安装rabbitmq延迟件,你可以按照以下步骤进行操作: 1. 首先,你需要找到件的下载地址。你可以在https://www.rabbitmq.com/community-plugins.html找到对应版本的件。 2. 根据你的rabbitmq版本,下载相应的件。 3. 将件拷贝到你的rabbitmq的plugins目录下。如果你不知道rabbitmq安装目录,你可以使用命令"whereis rabbitmq"来查看。将件放置在plugins目录下即可。 4. 让件生效。你可以通过重启rabbitmq服务来使件生效,或者使用其他方法,具体取决于你的操作系统和安装方式。 如果你是使用docker容器来部署rabbitmq,你可以使用以下命令将件拷贝到容器中: docker cp /root/rabbitmq_delayed_message_exchange-3.8.0.ez rabbitmq:plugins 以上是安装rabbitmq延迟件的一般步骤。请根据你的具体情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Rabbitmq延迟队列安装](https://blog.csdn.net/coderyjz/article/details/107378451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • JMeter测试多用户登录 5170
  • SQL关键字详解 5160
  • 服务端限流方案 4372
  • RabbitMQ延迟插件【安装windows/Linux(Docker)】 3642
  • RabbitMQ 发布确认+消息回退 3302

分类专栏

  • 架构 10篇
  • MQ消息队列 6篇
  • JavaEE 12篇
  • 秒杀项目相关 8篇
  • Redis 4篇
  • MySQL 9篇
  • JVM 1篇
  • 力扣算法 23篇

最新评论

  • Redis中缓存穿透、击穿、雪崩以及解决方案

    尘缘..: 博主对文章细节的把握让人印象深刻,每一个细节都为文章增色不少。文章内容丰富、结构清晰,让我在阅读过程中收获颇丰。期待博主未来能持续带来更多有价值的文章。

  • SQL关键字详解

    小天_2016: 左连接,包含左边所有行,如果左边某行在右边无匹配,则结果为空(null)

  • SQL关键字详解

    懵懵懂懂学前端: 总结很到位,支持一下表情包

  • 合并多个有序链表(PriorityQueue)

    ZYH_CKA: 好像有点悟了,谢谢

  • Lq93:复原 IP 地址

    Passerby_Wang: 写得也太详细了吧,学到了好多 也欢迎博主来我这里指点一二呀表情包表情包表情包

大家在看

  • 动态代理设计 65
  • Java--异常
  • 储能通信解决方案
  • 如何为董事会会议做准备?【会前会后】
  • 3.js - MeshPhysicalMaterial - 布料、针织物光泽设置 56

最新文章

  • 面试总结(mysql定精度/oom排查/spring三级缓存/stream流)
  • Kafka和RabbitMQ的对比
  • Mybaits缓存
2023年20篇
2022年62篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智博的自留地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码大运阿里店铺运营福田网站关键词优化广州建网站吉祥网站建设惠州建网站观澜百姓网标王推广塘坑设计公司网站松岗seo网站推广深圳百度标王松岗高端网站设计东莞关键词按天扣费丹竹头关键词排名包年推广民治建站石岩seo优化石岩网站搜索优化龙岗网站建设设计罗湖外贸网站设计坪山百度网站优化排名坪地模板网站建设永湖如何制作网站深圳营销型网站建设双龙百度爱采购大芬百搜词包沙井阿里店铺托管广州关键词排名包年推广光明设计公司网站吉祥seo网站推广龙岗网页设计盐田阿里店铺运营坪地网站优化排名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化