您的位置:首页 > 其它

RabbitMQ随手笔记(八)消费者端确认和拒绝(netCore2.0)

2018-03-10 15:15 1141 查看
1.处理不可路由的消息

如果发布的消息具有设置的“mandatory”标志,但不能传递,代理将返回给发送客户端(通过basic.return AMQP 0-9-1命令)。 为了通知这样的返回,客户可以订阅IModel.BasicReturn事件。 如果没有连接到事件的侦听器,则返回的消息将被静默删除。
model.BasicReturn +=  new RabbitMQ.Client.Events.BasicReturnEventHandler(...);

例如,如果客户端发布了一条“强制”标志设置为未绑定到队列的“direct”类型交换的消息,则BasicReturn事件将触发。
2.断开与RabbitMQ的连接

要断开连接,只需关闭通道和连接:
channel.Close(200, "Goodbye");

conn.Close();

注意,关闭频道被认为是良好的做法,但不是绝对必要的 - 它将在底层连接关闭时自动完成。 在某些情况下,您可能希望连接在连接上的最后一个打开通道关闭后自动关闭。 要实现这一点,请将IConnection.AutoClose属性设置为true,但仅在创建第一个通道后:
IConnection conn = factory.CreateConnection(...);

IModel channel = conn.CreateModel();

conn.AutoClose = true;

当AutoClose为true时,最后关闭的通道也将导致连接关闭。 如果在创建任何通道之前将其设置为true,则连接将在此时关闭。

3.消息确认
当autoAck参数设置为false,队列中的消息将会被分为两部分:一是等待投递的消息;一是已经投递但是还没有接收到消费者确认信号的消息。
如果消费者一直没有接收到确认信号,并且消费此消息的消费者已经端口连接,则RabbitMQ会安排该消息重新入队,等待下一个消费者,也可能是同一个消费者;
RabbitMQ不会对为确认的消息设置过期时间,所以消费者消费一条消息的时间可能会很长
4.消息拒绝channel.BasicReject(deliveryTag, requeue);

bool requeue = false;//是否将队列重新入队
bool mutil = false;//是否拒绝接受deliveryTag之前的所有消息,如果设置为false和BasicReject()方法一致
channel.BasicNack(deliveryTag, mutil, requeue);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息