簡體   English   中英

PHP + Stomp + ActiveMq,“AMQ_SCHEDULED_DELAY”不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM