Настройка режима доставки для AMQP (RabbitMQ) - PullRequest
1 голос
/ 30 июля 2011

Документы говорят:

public bool AMQPExchange::publish ( string $message , string $routing_key [, int $params = 0 [, array $attributes ]] )

Итак, у меня есть это

 $this->exchange->publish(serialize($queue_message), $routing_key,AMQP_MANDATORY,array('delivery_mode' => '2'));

Я пытаюсь разрешить обмену KEEP TRYING доставить сообщение?

1 Ответ

1 голос
/ 10 августа 2011

Вы не можете сказать бирже, чтобы она продолжала пытаться доставить ваше сообщение.

Обычно получатель сообщения либо автоматически получает сообщение, либо получает сообщение после успешной обработки. Я рекомендую второй из этих двух вариантов. Если сообщение не подтверждено, оно будет поставлено в очередь, и если в очереди более одного подписчика, возможно, что другой подписчик обработает его.

Мой опыт связан с обменом темами (когда вы реализуете разветвления, имея несколько очередей, которые подписываются на один и тот же ключ 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'));
...