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);
    }
}
相关推荐
云烟成雨TD几秒前
Spring AI Alibaba 1.x 系列【56】SAA Admin 平台功能介绍
java·人工智能·spring
Gauss松鼠会几秒前
GaussDB(DWS) 资源监控Topsql
java·网络·数据库·算法·oracle·性能优化·gaussdb
夏日听雨眠1 分钟前
数据结构(快速排序)
java·数据结构·算法
字节高级特工4 分钟前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
郝学胜-神的一滴6 分钟前
系统设计 012:从用户系统出发,吃透缓存、数据库与高并发设计
java·数据库·python·缓存·php·软件构建
happymaker06266 分钟前
SpringBoot学习日记——DAY04(整合junit,myBatis)
spring boot·学习·junit
人道领域9 分钟前
【LeetCode刷题日记】654.最大二叉树:递归算法详解
java·算法·leetcode
青云计划9 分钟前
Synchronized 锁升级:从偏向锁到重量级锁的性能进化之路
java·后端
spencer_tseng10 分钟前
HeapOOM && jvisualvm.exe
java·linux·jvisualvm.exe
一条泥憨鱼11 分钟前
详解MySQL事务(超详细版)
java·数据库·mysql·spring·maven·后端开发