日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 延时队列以及不生效问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。