activemq 延时队列以及不生效问题
生活随笔
收集整理的這篇文章主要介紹了
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 的延時功能就可以正常執行了
總結
以上是生活随笔為你收集整理的activemq 延时队列以及不生效问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监控管理服务器有什么作用
- 下一篇: elasticsearch的分布式架构原