设置AMQP(RabbitMQ)的交付模式

时间:2011-07-30 12:06:04

标签: php queue rabbitmq amqp

The docs说:

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'));

我正试图让交易所继续尝试传递信息?

1 个答案:

答案 0 :(得分:1)

您不能告诉交易所继续尝试传递您的信息。

通常,邮件的收件人会自动删除邮件,或者在成功处理邮件后会收到邮件。我推荐这两个选择中的第二个。如果消息没有被激活,那么它将被重新排队,如果队列中有多个用户,那么不同的用户可能会处理它。

我的经验是所有主题交换(通过让多个队列订阅相同的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'));