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);
    }
}
相关推荐
北漂IT民工_程序员_ZG22 分钟前
SpringBean生命周期,动态代理
java·spring boot·spring
老华带你飞43 分钟前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
木心爱编程1 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——按钮与标签联动:QPushButton + QLabel 实现图片切换器
java·c++·qt
椰羊~王小美1 小时前
setScale没传roudingmode,为什么会报错
java
WizLC2 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
喝汽水的猫^2 小时前
Java实现Excel 导出(多 Sheet、复杂格式)
java·excel
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于JavaWeb的疾病查询系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
雨中飘荡的记忆2 小时前
Java面向对象编程详解
java·开发语言
ss2732 小时前
SpringBoot+vue养老院运营管理系统
vue.js·spring boot·后端
zhangyifang_0092 小时前
Spring中的BeanFactory类
java·后端·spring