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

这篇具有很好参考价值的文章主要介绍了RabbitMQ延迟插件【安装windows/Linux(Docker)】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

答案:

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

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

延迟队列应用场景:

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

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

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

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

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

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

下载过程:

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

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

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

安装过程(Windows)

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

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

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

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

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

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

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

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

安装过程(Linux【Docker】)

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

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

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

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

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

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

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

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

docker exec -it a687ef46141b bash

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

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

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

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

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

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

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

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

总结:以上就是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后消息正常被消费,基于插件的延迟队列完美解决了问题。

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

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

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

到了这里,关于RabbitMQ延迟插件【安装windows/Linux(Docker)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [超详细]RabbitMQ安装延迟消息插件

    Community Plugins — RabbitMQ https://www.rabbitmq.com/community-plugins.html 进入以上地址以后,找到Routing里边的rabbitmq_delayed_message_exchange然后点击Releases   下载完成以后  然后解压到plugins文件中  然后再sbin目录下运行 rabbitmq-plugins enable rabbitmq_delayed_message_exchange  查看交换机类型中是否有

    2024年02月07日
    浏览(42)
  • RabbitMQ实现延迟消息,RabbitMQ使用死信队列实现延迟消息,RabbitMQ延时队列插件

    假设有一个业务场景:超过30分钟未付款的订单自动关闭,这个功能应该怎么实现? RabbitMQ使用死信队列,可以实现消息的延迟接收。 队列有一个消息过期属性。就像丰巢超过24小时就收费一样,通过设置这个属性,超过了指定事件的消息将会被丢弃。 这个属性交:x-message

    2024年02月13日
    浏览(59)
  • 消息队列-RabbitMQ:延迟队列、rabbitmq 插件方式实现延迟队列、整合SpringBoot

    1、延迟队列概念 延时队列内部是有序的 , 最重要的特性 就体现在它的 延时属性 上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说, 延时队列就是用来存放需要在指定时间被处理的元素的队列。 延迟队列使用场景: 订单在十分钟之内未支付则

    2024年02月22日
    浏览(47)
  • Rabbitmq 延迟队列---插件

            解决没法优先发送延时时间短的消息。 插件安装 配置类 生产者 消费者

    2024年02月12日
    浏览(51)
  • RabbitMQ+springboot用延迟插件实现延迟消息的发送

    延迟队列:其实就是死信队列中消息过期的特殊情况 延迟队列应用场景: 可以用死信队列来实现,不过死信队列要等上一个消息消费成功,才会进行下一个消息的消费,这时候就需要用到延迟插件了,不过要线在docker上装一个插件 前置条件是在Docker中部署过RabbitMq。 1、打开

    2024年02月10日
    浏览(43)
  • RabbitMQ系列(18)--RabbitMQ基于插件实现延迟队列

    1、前往RabbitMQ官网下载往RabbitMQ添加延迟消息的插件 RabbitMQ官网下载插件的网址:https://www.rabbitmq.com/community-plugins.html 2、下载rabbitmq_delayer_message_exchange插件(注:RabbitMQ是什么版本的,下载的插件就得是什么版本的,得对应上,以下截图为官方文档的对插件版本的要求说明)

    2024年02月16日
    浏览(35)
  • RabbitMQ使用延迟插件,代码量直接减少一半!

    今天介绍一下使用RabbitMQ的延迟插件方便实现延迟消息的方案。 RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议) 的开源实现。 RabbitMQ 是轻量级且易于部署的,能支持多种消息协议。 RabbitMQ 可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。 具体特

    2024年02月09日
    浏览(44)
  • windows10环境下安装RabbitMQ以及延时插件(图文)

    安装转载:https://www.cnblogs.com/saryli/p/9729591.html 插件转载:https://blog.csdn.net/nbdclw/article/details/107441772 安装及配置环境 第一步:下载并安装erlang 原因: RabbitMQ 服务端代码是使用并发式语言 Erlang 编写的,安装 Rabbit MQ 的前提是安装 Erlang 。 下载地址:http://www.erlang.org/downloads 根

    2024年02月07日
    浏览(50)
  • Docker中为RabbitMQ安装rabbitmq_delayed_message_exchange插件

    rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延迟消息传递(或计划消息传递)的插件。 插件下载地址:https://www.rabbitmq.com/community-plugins.html 欢迎访问我的个人博客:https://wk-blog.vip 首先需要确定我们当前使用的RabbitMQ的版本,我们可以直接登录Web端的管理界面查看版本 也可

    2024年02月10日
    浏览(47)
  • RabbitMQ常见问题之延迟消息

    当一个队列中的消息满足下列情况之一时,可以成为死信( dead letter ): 消费者使用 basic.reject 或 basic.nack 声明消费失败,并且消息的 requeue 参数设置为 false 消息是一个过期消息,超时无人消费 要投递的队列消息堆积满了,最早的消息可能成为死信 如果该队列配置了 dead

    2024年01月18日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包