将确认(发布者确认)与php amqplib一起使用

将确认(发布者确认)与php amqplib一起使用,php,rabbitmq,amqp,Php,Rabbitmq,Amqp,我试图弄清楚如何使用PHPAMqplib库来使用Confirms(),这是一个推荐使用RabbitMQ和PHPAT的库 代码本身没有很好的文档化,我找不到任何与我找到的Java和python接口的接口相一致的东西 Java示例是 我已经搜索了PHP源代码中可以想到的各种函数名组合,但没有找到任何结果。我正在寻找类似于: $channel->confirm_select(); ... $channel->wait(); 它似乎支持该功能,但我看不出它是如何向用户公开的。显然,PE

我试图弄清楚如何使用PHPAMqplib库来使用Confirms(),这是一个推荐使用RabbitMQ和PHPAT的库

代码本身没有很好的文档化,我找不到任何与我找到的Java和python接口的接口相一致的东西

Java示例是

我已经搜索了PHP源代码中可以想到的各种函数名组合,但没有找到任何结果。我正在寻找类似于:

$channel->confirm_select();

...

$channel->wait();

它似乎支持该功能,但我看不出它是如何向用户公开的。

显然,PECL AMQP库和纯php amqplib库都没有实现该扩展。此时唯一真正的解决方案是实现两个队列来模拟对发布者的确认


有计划在这两个库中都实现确认,但我在这两个库中都没有看到任何进展。

我今天一直在寻找它,发现它已经实现了

看看这个

下面是一个片段:

$connection = new AMQPStreamConnection(HOST, PORT, USER, PASS, VHOST);
$channel = $connection->channel();
$channel->set_ack_handler(
    function (AMQPMessage $message) {
        echo "Message acked with content " . $message->body . PHP_EOL;
    }
);
$channel->set_nack_handler(
    function (AMQPMessage $message) {
        echo "Message nacked with content " . $message->body . PHP_EOL;
    }
);
/*
 * bring the channel into publish confirm mode.
 * if you would call $ch->tx_select() befor or after you brought the channel into this mode
 * the next call to $ch->wait() would result in an exception as the publish confirm mode and transactions
 * are mutually exclusive
 */
$channel->confirm_select();
/*
    name: $exchange
    type: fanout
    passive: false // don't check if an exchange with the same name exists
    durable: false // the exchange won't survive server restarts
    auto_delete: true //the exchange will be deleted once the channel is closed.
*/
$channel->exchange_declare($exchange, 'fanout', false, false, true);
$i = 1;
$msg = new AMQPMessage($i, array('content_type' => 'text/plain'));
$channel->basic_publish($msg, $exchange);
/*
 * watching the amqp debug output you can see that the server will ack the message with delivery tag 1 and the
 * multiple flag probably set to false
 */
$channel->wait_for_pending_acks();

我想另一个注意事项是,我可以使用两个消息队列来实现这一点,但如果库支持,我宁愿使用RabbitMQ内置的功能。您如何使用两个队列来实现这一点?