activemq延时队列使用

1、配置mq,activemq.xml配置文件,启用延时投递(注:schedulerSupport="true" 的位置要在最外面,否则不生效)

2、config配置

@Configuration
public class QueueConfig {

    @Bean
    public Queue queue() {
        return new ActiveMQQueue("order.queue");
    }

    @Autowired
    private ActiveMQConnectionFactory connectionFactory;

    @Bean
    public QueueProducerService queueProducerService() {
        return new QueueProducerServiceImpl();
    }

    @Bean
    public QueueConsumerService queueConsumerService() {
        return new QueueConsumerServiceImpl();
    }

    @Bean
    public JmsMessagingTemplate jmsMessagingTemplate() {
        JmsMessagingTemplate jmsMessagingTemplate = new JmsMessagingTemplate(connectionFactory);
        jmsMessagingTemplate.setMessageConverter(new SimpleMessageConverter());
        return jmsMessagingTemplate;
    }

}

3、生产者

public class QueueProducerServiceImpl implements QueueProducerService {

    @Autowired
    private JmsTemplate jmsTemplate;

    @Autowired
    private Queue queue;

    @Override
    public void send(OrderCancel msg) {
        jmsTemplate.send(queue, session -> {
            ObjectMessage objectMessage = session.createObjectMessage(msg);
            objectMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,900*1000);
            return objectMessage;
        });
    }


    @Override
    public void sendOrderCancel(OrderCancel orderCancel) {
        send(orderCancel);
    }
}

4、消费者

public class QueueConsumerServiceImpl implements QueueConsumerService {

    @Autowired
    YoupinOrderService youpinOrderService;

    @Override
    @JmsListener(destination = "order.queue")
    public void receiveQueue(OrderCancel orderCancel) {
        if (orderCancel != null){
            youpinOrderService.orderCancel(orderCancel.getCartId());
        }
    }
}

在mq管理台可以看到延时的任务

activemq延时队列使用_第1张图片

你可能感兴趣的:(插件,mq)