我有一些关于php + RabbitMQ + MySQL的问题。
我有php工作者,更新DB中的一条记录。现在我试图纠正 服务器MySQL消失后工作。
我在做什么: 我正在尝试重新连接到DB 10次,如果我不能 - 需要将此按摩返回到RabbitMQ。
要接受消息,我使用 basic_ack ,拒绝我使用 basic_nack 。
示例:
if ($can_accept_message) {
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
} else {
$message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag']);
}
但basic_nack从队列中删除此消息,我不能再重复一次;(
阅读本文: https://github.com/php-amqplib/php-amqplib/issues/221
但它仍无效。
怎么了?也许你还有其他想法吗?
答案 0 :(得分:1)
似乎函数basic_nack定义如下:
/**
* Rejects one or several received messages
*
* @param string $delivery_tag
* @param bool $multiple
* @param bool $requeue
*/
public function basic_nack($delivery_tag, $multiple = false, $requeue = false)
如您所见,第三个参数是$requeue = false
你应该试试
else {
$message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag'], false, true);
}