Вы не можете сказать бирже, чтобы она продолжала пытаться доставить ваше сообщение.
Обычно получатель сообщения либо автоматически получает сообщение, либо получает сообщение после успешной обработки. Я рекомендую второй из этих двух вариантов. Если сообщение не подтверждено, оно будет поставлено в очередь, и если в очереди более одного подписчика, возможно, что другой подписчик обработает его.
Мой опыт связан с обменом темами (когда вы реализуете разветвления, имея несколько очередей, которые подписываются на один и тот же ключ routing_key. Я всегда использовал delivery_mode 2, а также объявлял очереди как длительные.
Если очередь не существует до публикации сообщений, они автоматически исчезают.
Я подозреваю, что ваша проблема со строкой '2'
. Вы пытались использовать номер 2
вместо этого? Также хорошей идеей будет указывать content_type в массиве. Это сделало бы это
$this->exchange->publish(serialize($queue_message),
$routing_key,AMQP_MANDATORY,array('delivery_mode' => 2,
'content_type' => 'text/json'));