[英]PHP+Stomp+ActiveMq, “AMQ_SCHEDULED_DELAY” not working
我正在使用基於php.And Stomp + activeMQ的laravel框架。 在這里我需要發送一些東西到mq,但是消息應該在180秒后消耗,而不是立即消耗。
Option1,我發送時間戳,消費者將檢查時間戳。如果間隔> 180,那么做一些事情和ack()。
Option1是低效的,消費者每時每刻都在檢查時間戳,但很少有消息被激活。
Option2,shell_exec(“php send.php |現在+3分鍾”),看起來很奇怪。
還有更好的解決方案嗎?
我根據Lee的建議設置了“AMQ_SCHEDULED_DELAY”,但是消息也會立即發送。也許延遲配置只能用於PUB / SUB但不能用於PTP?這是我的代碼:
$con = new Stomp(config('app.mq_url'));
if (!$con->isConnected()) {
$con->connect();
$con->setReadTimeout(3);
}
$con->begin("Transaction");
$options =[
'persistent'=> $persistent,
'AMQ_SCHEDULED_DELAY' => $delay * 1000
];
$con->send($queue, json_encode($params), $options);
$con->commit("Transaction");
$con->disconnect();
$con->send($queue, json_encode($params), $options);
我記得在activemq.xml中設置schedulerSupport = true。
我指的是: ActiveMq Doc ,這是關注嗎? 我不知道。或者在標題中發送'AMQ_SCHEDULED_DELAY'是否可以? 因為ActiveMq Doc:Stomp不會將其列為標題。
檢查消息屬性消息屬性scheduledJobId保留供Job Scheduler使用。 如果在發送之前設置了此屬性,則將立即發送消息而不安排該消息。 此外,在收到預定的消息后,將在收到的消息上設置屬性scheduledJobId,因此如果使用類似Camel Route的內容可能會記住這一點,這可能會在重新發送消息時自動復制屬性。
編輯activemq.xml啟用代理schedulerSupport =“true”
例如。
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">
然后重新啟動activemq服務器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.