activemq 延时队列以及不生效问题

最近在做的项目中有一个业务涉及到了订单的有效期的问题(即订单达到一定的时间未支付完成就让该订单失效),于是就想到了延时队列的方式,由于项目采用的是activemq,所以就写了个activemq延时队列代码如下:

发送方代码如下:

    /**
     * 发送延迟消息
     * @param msg
     * @param delay
     */
    public void send(Queue queue, String msg, long delay) {
        _log.info("发送MQ延时消息:msg={},delay={}", msg, delay);
        jmsTemplate.send(queue, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                TextMessage tm = session.createTextMessage(msg);
                tm.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
                tm.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
                return tm;
            }
        });
    }

接收方代码如下:

 @JmsListener(destination = MqConfig.DELAY_ORDER_QUEUE_NAME)
    @Async("mqExecutor")
    public void receive(String orderId) {
        String logPrefix = "【订单过期延时队列】";
        if (StringUtils.isEmpty(orderId)) {
            return;
        }
        _log.info("{}接收消息:payOrderId={}", logPrefix, orderId);
       //@todo 
    }

然鹅,一切并没有如想象中那么顺利,订单发送到延时队列后立刻就被消费到了。。。

最后在网上的搜索过程中去查看了一下官方的文档, linux 版的activemq 和window 下的mq 没有开启延时功能这时需要我们去mq 的配置文件中去将mq 的延时功能打开 ,巨坑啊。。。。

开启方式如下:

在mq 的安装目录下 的conf/activemq.xml 

在配置文件的40 行里加上 

schedulerSupport="true"

效果如下:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">

将修改的文件保存,服务重启,mq 的延时功能就可以正常执行了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值