订单延迟取消 订单超时取消 定时关闭订单 延迟队列 延时队列 java SpringBoot

在这里插入图片描述

1. 创建队列、交换机

延迟交换机:exchange.delay.someMessage
延迟队列:queue.delay.someMessage

死信交换机:exchange.deadLetter.someMessage
死信队列:queue.deadLetter.someMessage

延迟交换机 与 延迟队列 绑定
死信交换机 与 死信队列 绑定

1.1 注意:创建延迟队列时设置 x-dead-letter-exchange

创建 延迟队列 queue.delay.someMessage时,设置 x-dead-letter-exchange 的值为 死信交换机
x-dead-letter-exchange = exchange.deadLetter.someMessage
在这里插入图片描述

1.2 创建延迟队列时设置 x-message-ttl (可以设置,也可以不设置)

在这里插入图片描述
创建 延迟队列 queue.delay.someMessage

  1. 如果延迟队列没设置 x-message-ttl 消息存活时间取消息设置的properties.setExpiration("5000");有效期5000毫秒
  2. 如果延迟队列设置了 x-message-ttl 消息存活时间,例如:x-message-ttl = 10000,消息也设置了有效期properties.setExpiration("5000");,那么,以两者中较小值5000有效

2. 生产者

    @Autowired
    private  RabbitTemplate rabbitTemplate;

    @PostMapping("/testMQ")
    @ResponseBody
    public void testMQ(@RequestBody String someMessage)  {

        rabbitTemplate.setExchange("exchange.delay.someMessage");
        rabbitTemplate.setRoutingKey("delayKey");

        MessageProperties properties = new MessageProperties();
        // 设置有效期,毫秒
        properties.setExpiration("5000");

        Message message = MessageBuilder
                .withBody(someMessage.getBytes())
                .andProperties(properties)
                .build();

        rabbitTemplate.send(message);
    }

3. 消费者

    @RabbitListener(queues = {"queue.deadLetter.someMessage"})
    public void consumer(Message message, Channel channel) {
        //推送的消息
        String msg = new String(message.getBody());
        System.out.println("message:"+msg);
        try {
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (IOException e) {
            System.out.println(e);
        }
    }

4. 其他

MQ配置类

package com.allqj.finance.configuration;

import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @description: MQ配置类
 **/
@Configuration
public class MQConfig {
    @Value("${spring.rabbitmq.host}")
    private String host;
    @Value("${spring.rabbitmq.port}")
    private String port;
    @Value("${spring.rabbitmq.username}")
    private String username;
    @Value("${spring.rabbitmq.password}")
    private String password;
    @Value("${spring.rabbitmq.virtualHost}")
    private String virtualHost;
    @Bean
    public ConnectionFactory connectionFactory(){
        CachingConnectionFactory factory = new CachingConnectionFactory();
        factory.setUri("amqp://"+username+":"+password+"@"+host+":"+port);
        factory.setVirtualHost(virtualHost);
        return factory;
    }

    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        return rabbitAdmin;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        //设置Exchange默认操作的exchange和routingkey
//        rabbitTemplate.setExchange("zhihao.direct.exchange");
//        rabbitTemplate.setRoutingKey("zhihao.debug");
        return rabbitTemplate;
    }
}

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值