Rabbit延迟队列实现---插件实现

自行百度如何安装rabbitmq

  1. 点击链接下载rabbitmq插件
  2. 找到rabbitmq_delayed_message_exchange,点击Releases
  3. 找到自己mq版本对应下载
  4. 移动到rabbitmq目录下plugins
  5. 执行命令rabbitmq-plugins.bat enable rabbitmq_delayed_message_exchange安装插件
  6. 此时就会出现x-delayed-message
  1. 创建一个交换机

  2. 引入maven

    复制代码
         <!--2. rabbitmq-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
  3. yml配置

java 复制代码
spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: 账号
    password: 密码
    virtual-host: 路径 默认是/
  1. 定义一些参数
java 复制代码
public class RabbitMqConstant {
    //类型
	public static final String DELAY_TYPE = "x-delayed-message";
    //交换机名称
	public static final String EXCHANGE_TEST = "exchange.test";
    //路由
	public static final String ROUTING_TEST = "routing.test";
	//队列
	public static final String QUEUE_TEST = "queue.test";
}
  1. 代码块
java 复制代码
@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Override
    public void send() {
        HashMap<Object, Object> socketData = new HashMap<>();
        socketData.put("message", "收到消息");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        socketData.put("date", sdf1.format(new Date()));
        rabbitTemplate.convertAndSend(RabbitMqConstant.EXCHANGE_TEST, RabbitMqConstant.ROUTING_TEST, new Gson().toJson(socketData), a -> {
            a.getMessageProperties().setDelay(2000);//延迟2秒
            return a;
        });
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(RabbitMqConstant.QUEUE_TEST),
            key = RabbitMqConstant.ROUTING_TEST,
            exchange = @Exchange(value = RabbitMqConstant.EXCHANGE_TEST, type = RabbitMqConstant.DELAY_TYPE)
    ))
    public void responseToUser(String content) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        String format = sdf1.format(new Date());
        System.out.println("接受到消息时间----" + format);
        HashMap<Object, Object> socketData = new Gson().fromJson(content, new TypeToken<HashMap<Object, Object>>() {
        }.getType());
        String date = String.valueOf(socketData.get("date"));
        System.out.println("发送消息时间----" + date);
        System.out.println("消息----" + content);
    }
}
相关推荐
bingbingyihao10 分钟前
多数据源 Demo
java·springboot
Monly213 小时前
RabbitMQ:数据隔离
分布式·rabbitmq
在努力的前端小白5 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
一叶飘零_sweeeet7 小时前
从繁琐到优雅:Java Lambda 表达式全解析与实战指南
java·lambda·java8
艾伦~耶格尔8 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
一只叫煤球的猫8 小时前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
最初的↘那颗心8 小时前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
JH30739 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar
带刺的坐椅10 小时前
轻量级流程编排框架,Solon Flow v3.5.0 发布
java·solon·workflow·flow·solon-flow
David爱编程10 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端