RabbitMQ整合spring boot(二)---基于插件的延迟队列

一、下载安装插件

链接:延迟插件下载地址

二、安装插件

将你下载好的插件放到rabbitmq的安装目录plugins下,

 

然后进入RabbitMQ安装目录的sbin目录下,使用如下命令启用延迟插件;

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

 注意:我这是第二次启动,之前已经启动过,所以返回结果稍有不同

 三、延迟队列配置文件

@Configuration
public class DelayedQueueConfig {
    public static final String DELAYED_EXCHANGE ="delayed_exchange";
    public static final String DELAYED_QUEUE ="delayed_queue";
    public static final String DELAYED_ROUTING_KET ="delayed.routing_key";

    //声明交换机(基于延迟插件)
    @Bean("delayedExchange")
    public CustomExchange delayedExchange() {
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-delayed-type", "direct");
        return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true,
                false, arguments);
    }

    //声明队列
    @Bean("delayedQueue")
    public Queue delayedQueue() {
        //不能直接  new Queue(),会连接不上rabbitMq
        return QueueBuilder.durable(DELAYED_QUEUE).build();
    }

    //绑定
    @Bean
    public Binding bindingDelayedExchangeAndQueue(@Qualifier("delayedQueue") Queue delayedQueue,
                                                  @Qualifier("delayedExchange") CustomExchange delayedExchange) {
        return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KET).noargs();
    }
}

注意:重点代码

Map<String, Object> arguments = new HashMap<>();
arguments.put("x-delayed-type", "direct");

四、消息生产者

    @GetMapping("/sendMsgByDelayed")
    //发送消息并设置过期时间 (基于延迟插件)
    public void sendMsgByDelayed(@RequestParam("message") String message,
                                @RequestParam("time") Integer time) {
        log.info("当前时间 {}, 时间为{},发送信息: {}",new Date().toString(),time, message);
        rabbitTemplate.convertAndSend(DelayedQueueConfig.DELAYED_EXCHANGE,
                DelayedQueueConfig.DELAYED_ROUTING_KET,
                time+"毫秒延迟"+message, msg->{
                    //设置发送消息的延迟时长
                    msg.getMessageProperties().setDelay(time);
                    return msg;
                });
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值