(mq)rabbitmq安装延时队列插件实现延时消息 2

weblog 1250 0 0

上一篇《(mq)rabbitmq安装延时队列插件实现延时消息 1》文章中介绍了rabbitmq安装延时队列插件。本编将继续结合代码来实现延时队列(基于springboot项目)。

下方所有源代码均已上传到github: https://github.com/18438301593/rabbitmq ,注意看README.md文档

配置文件

生产者消费者都一样

spring:
  #给项目来个名字
  application:
    name: rabbitmq-consumer
  #配置rabbitMq 服务器
  rabbitmq:
    host: 192.168.159.128
    port: 5672
    username: guest
    password: guest

配置类


import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
* @author: Jiajiajia
* @Date: 2021/8/26
* @Description: 延时交换机(需要安装插件 rabbitmq_delayed_message_exchange)
*/
@Configuration
public class DelayExchangeConfig {
    public DelayExchangeConfig(){
        System.out.println("DelayExchangeConfig init");
    }

    /**
     * 延时队列
     * @return
     */
    @Bean
    public Queue delayQueue(){
        return new Queue("delayQueue",true);
    }


    /**
     * 延时队列交换机
     * 注意这里的交换机类型:CustomExchange
     * @return
     */
    @Bean
    public CustomExchange delayExchange(){
        Map<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "direct");
        return new CustomExchange("delayExchange","x-delayed-message",true, false,args);
    }

    /**
     * 给延时队列绑定交换机
     * @return
     */
    @Bean
    public Binding delayBinding(Queue delayQueue, CustomExchange delayExchange){
        return BindingBuilder.bind(delayQueue).to(delayExchange).with("delay").noargs();
    }
}

生产者

    /**
     * 测试 延时交换机
     * @return
     */
    @GetMapping("delay")
    private String delay(@RequestParam("time") Integer time){
        Map map = new HashMap();
        map.put("id","1");
        map.put("name","delay");
        rabbitTemplate.convertAndSend("delayExchange","delay", map,
            message -> {
                message.getMessageProperties().setHeader("x-delay",time);
                return message;
            });
        return "ok";
    }

消费者


import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Map;

/**
* @author: Jiajiajia
* @Date: 2021/8/26
* @Description: 延迟交换机 监听器
*/
@Component
public class DelayListener {
    public DelayListener(){
        System.out.println("DelayListener init ");
    }
    @RabbitListener(queues = "delayQueue")
    public void receive(Map map){
        System.out.println("delayQueue监听接收到消息:"+map);
    }
}

猜你喜欢
official 1258 续介绍在rabbitmq容器中rabbitmq_delayed_message_exchange并使用的方法。下载与rabbitmq版本相符的,下载地址:https://github
official 1061 交换机),这个Exchange就是DLX死信交换机本质上也是一个普通交换机,和一般的Exchange没有区别,只不过它处理的特殊性,所以称之为死信。它能在任何的上被指定,际上就是设置某个
框架 1702 http://www.jiajiajia.club/weblog/blog/artical/88springboot(1)中已经创建了一个项目并且运行了起来,在就把独立的jar包运行起来。1.在
weblog 5333 红黑树简介 红黑树(RedBlackTree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是关联数组。红黑树和AVL树类似,都是在进行入和删除操作通过特定
数据结构与算法 5623 ,largestout)的行为特征。通常采用堆数据结构来。优先级是不同于先进先出的另一种。每次从中取出的是具有最高优先权的元素。操作:1.往中添加数据2.从中获取数据优先级
工具 1570 finish后eclipse右下方会有提交进度出如下则说明提交远程库成功刷新github,发推送成功下一篇:eclipse中使用Git管理项目工程代码(3)将远程库的工程克隆到本地
java基础 4413 1.什么是阻塞阻塞是一个在基础上又支持了两个附加操作的2.支持阻塞的入方法:会阻塞入元素的线程,直到不满。1.支持阻塞的移除方法:,获取元素的线程会等
mqtt协议 1597 一、概述二、设计规范三、主要特性四、协议原理mqtt客户端mqtt服务器一、概述  MQTT(MessageQueuingTelemetryTransport,遥测传输协议),是一种基于发布
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。