Я использую фреймворк Laravel на основе php. И Stomp + activeMQ.
Здесь мне нужно что-то отправить в mq, однако сообщение должно быть использовано через 180 секунд, а не сразу.
Вариант 1, я отправляю его с отметкой времени, и потребитель будет проверять отметку времени. Если интервал> 180, затем что-то сделать и ack ().
Вариант 1 неэффективен, на каждый момент, когда потребитель проверяет временную метку, но получено очень мало сообщений.
Option2, shell_exec («php send.php | сейчас + 3 минуты»), выглядит странно.
Есть ли лучшие решения?
Я установил «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);
И я не забываю установить schedulerSupport = true в activemq.xml.
Я имею в виду это: ActiveMq Doc, это касается? Я не знаю. Или это нормально, чтобы отправить «AMQ_SCHEDULED_DELAY» в заголовке? Так как ActiveMq Doc: Stomp не перечисляет это как заголовок.
Проверьте свои свойства сообщения
Свойство сообщения scheduleJobId зарезервировано для использования планировщиком заданий. Если это свойство установлено перед отправкой, сообщение будет отправлено немедленно и не запланировано. Кроме того, после получения запланированного сообщения в запланированном сообщении будет установлено свойство scheduleJobId, так что имейте это в виду, если используете что-то вроде верблюжьего маршрута, который может автоматически копировать свойства при повторной отправке сообщения.
Задача ещё не решена.
Других решений пока нет …