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

 

1.处理不可路由的消息

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

 
  1. model.BasicReturn += new RabbitMQ.Client.Events.BasicReturnEventHandler(...);
例如,如果客户端发布了一条“强制”标志设置为未绑定到队列的“direct”类型交换的消息,则BasicReturn事件将触发。

 

2.断开与RabbitMQ的连接

 

要断开连接,只需关闭通道和连接:

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

 

 

 

更多精彩请关注公众号:隔壁王小猿(gbwxy-happy)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值