Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;跺脚+;ActiveMq,”;AMQ“计划的”延迟;不起作用_Php_Delay_Message Queue_Stomp - Fatal编程技术网

PHP+;跺脚+;ActiveMq,”;AMQ“计划的”延迟;不起作用

PHP+;跺脚+;ActiveMq,”;AMQ“计划的”延迟;不起作用,php,delay,message-queue,stomp,Php,Delay,Message Queue,Stomp,我正在使用基于php.和Stomp+activeMQ的laravel框架。 在这里,我需要向mq发送一些内容,但是消息应该在180秒后被消耗,而不是立即消耗 选项1,我将它与时间戳一起发送,消费者将检查时间戳。如果间隔>180,则执行一些操作并确认() 选项1效率低下,消费者每一刻都在检查时间戳,但确认的消息很少 选项2,shell_exec(“php send.php|at now+3分钟”),它看起来很奇怪 有没有更好的解决办法 我根据Lee的建议设置了“AMQ_SCHEDULED_DELA

我正在使用基于php.和Stomp+activeMQ的laravel框架。 在这里,我需要向mq发送一些内容,但是消息应该在180秒后被消耗,而不是立即消耗

选项1,我将它与时间戳一起发送,消费者将检查时间戳。如果间隔>180,则执行一些操作并确认()

选项1效率低下,消费者每一刻都在检查时间戳,但确认的消息很少

选项2,shell_exec(“php send.php|at now+3分钟”),它看起来很奇怪

有没有更好的解决办法

我根据Lee的建议设置了“AMQ_SCHEDULED_DELAY”,但是消息也会立即发送。可能延迟配置只能用于发布/订阅,而不能用于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

我指的是:,这是否有关?我不知道。或者在标题中发送“AMQ\u计划的\u延迟”可以吗?因为没有将其列为标题

检查您的邮件属性 消息属性scheduledJobId保留供作业调度器使用。如果在发送前设置了此属性,则消息将立即发送,而不是按计划发送。此外,在收到预定消息后,将在收到的消息上设置属性scheduledJobId,因此,如果使用骆驼路由之类的方法,则在重新发送消息时可能会自动复制属性,请记住这一点


编辑activemq.xml启用代理schedulerSupport=“true”

例如



然后重新启动activemq服务器

编辑activemq.xml启用代理schedulerSupport=“true”

例如



然后重新启动activemq服务器

activemq支持延迟/计划传递,因此在向AMQ发送消息时只需设置正确的选项。这里有一个实现延迟交付的laravel stomp队列适配器:回答得好!谢谢。但是,它在我的项目中不起作用。请尝试将phpscript作为主管任务运行(),ActiveMQ支持延迟/计划传递,因此只需在将消息发送到AMQ时设置正确的选项即可。这里有一个实现延迟交付的laravel stomp队列适配器:回答得好!谢谢。但是,它在我的项目中不起作用。请尝试将phpscript作为主管任务运行()
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">