PHP+;跺脚+;ActiveMq,”;AMQ“计划的”延迟;不起作用
我正在使用基于php.和Stomp+activeMQ的laravel框架。 在这里,我需要向mq发送一些内容,但是消息应该在180秒后被消耗,而不是立即消耗 选项1,我将它与时间戳一起发送,消费者将检查时间戳。如果间隔>180,则执行一些操作并确认() 选项1效率低下,消费者每一刻都在检查时间戳,但确认的消息很少 选项2,shell_exec(“php send.php|at now+3分钟”),它看起来很奇怪 有没有更好的解决办法 我根据Lee的建议设置了“AMQ_SCHEDULED_DELAY”,但是消息也会立即发送。可能延迟配置只能用于发布/订阅,而不能用于PTP?以下是我的代码: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
$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">