使用发布者确认时,是否可以恢复被取消的消息

When using publisher confirms, is it possible to recover the message that was nacked

当使用publisher confirms时,是否可以恢复被nacked的消息?我一直在查看 Channel_BasicNacks 的事件参数,但没有找到对应的对象或 属性。

即:

_factory = new ConnectionFactory
{
        HostName = Settings.HostName, UserName = Settings.UserName, Password = Settings.Password,
        AutomaticRecoveryEnabled = true
};

_connection = _factory.CreateConnection();
Channel = _connection.CreateModel();

Channel.BasicAcks += Channel_BasicAcks;
Channel.BasicNacks += Channel_BasicNacks;
Channel.ConfirmSelect();

Channel.QueueDeclare(Settings.QueueName, true, false, false, null);
}

private void Channel_BasicNacks(object sender, RabbitMQ.Client.Events.BasicNackEventArgs e)
{
    IModel model = (IModel)sender;
    throw new NotImplementedException();
}

您可以尝试重新发送 basic.nack 的消息,直到 basic.ack 确认为止。

来自Confirms (aka Publisher Acknowledgements)(否定确认部分):

basic.nack will only be delivered if an internal error occurs in the Erlang process responsible for a queue.

basic.nack 不是常见的服务器方法(我从未见过),但应该可以通过破坏一些内部结构通过 rabbitmqctl eval 触发它。