| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
moko 28.09 20:13
В обычной очереди просто поставить задаче "не выполнять до такого-то времени" нельзя. expiration, который есть у publish, это TTL сообщения, а не задержка доставки. Если у очереди есть consumer, он получит сообщение сразу.$.expiration(60000)Через минуту оно протухнет и RabbitMQ переложит его в обычную рабочую очередь.
$.headers[
$.x-delay(60000)
]Текущий класс amqp со стороны Parser3 это уже позволяет: у declare есть произвольные arguments и type, у publish есть произвольные headers.^o.declare[
$.exchange[tasks-delay]
$.type[x-delayed-message]
$.durable(true)
$.arguments[
$.x-delayed-type[direct]
]
]
^o.declare[
$.queue[tasks]
$.durable(true)
]
^o.bind[
$.exchange[tasks-delay]
$.queue[tasks]
$.routing_key[tasks]
]
^o.publish[$message;
$.exchange[tasks-delay]
$.routing_key[tasks]
$.headers[
$.x-delay(60000)
]
]Тогда сама tasks остается обычной очередью, а задержка происходит до попадания сообщения в нее.