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);
    }
}
相关推荐
一切顺势而行几秒前
kafka总结
java
yanjiaweiya28 分钟前
云原生-集群管理
java·开发语言·云原生
gadiaola37 分钟前
【JavaSE面试篇】Java集合部分高频八股汇总
java·面试
GJCTYU1 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
艾迪的技术之路1 小时前
redisson使用lock导致死锁问题
java·后端·面试
今天背单词了吗9801 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师1 小时前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构2 小时前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖2 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全