RabbitMQ随手笔记(八)消费者端确认和拒绝(netCore2.0)
2018-03-10 15:15
1141 查看
1.处理不可路由的消息
如果发布的消息具有设置的“mandatory”标志,但不能传递,代理将返回给发送客户端(通过basic.return AMQP 0-9-1命令)。 为了通知这样的返回,客户可以订阅IModel.BasicReturn事件。 如果没有连接到事件的侦听器,则返回的消息将被静默删除。
例如,如果客户端发布了一条“强制”标志设置为未绑定到队列的“direct”类型交换的消息,则BasicReturn事件将触发。
2.断开与RabbitMQ的连接
要断开连接,只需关闭通道和连接:
注意,关闭频道被认为是良好的做法,但不是绝对必要的 - 它将在底层连接关闭时自动完成。 在某些情况下,您可能希望连接在连接上的最后一个打开通道关闭后自动关闭。 要实现这一点,请将IConnection.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);
如果发布的消息具有设置的“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);
相关文章推荐
- RabbitMQ随手笔记(三)RabbitMQ-“Hello World” 之消费者(.netCore2.0)
- RabbitMQ随手笔记(十三)TTL(.netCore2.0)
- RabbitMQ随手笔记(十五)持久化(.netCore2.0)
- RabbitMQ随手笔记(四)连接RabbitMQ (.netCore2.0)
- RabbitMQ随手笔记(五)交换器和队列(.netCore2.0)
- RabbitMQ随手笔记(六)发送消息(.netCore2.0)
- RabbitMQ随手笔记(九)RabbitMQ实现RPC(netCore2.0)
- RabbitMQ随手笔记(十一)mandatory参数(.netCore2.0)
- RabbitMQ随手笔记(二)RabbitMQ-"Hello World" 之生产者(netCore2.0)
- RabbitMQ随手笔记(十二)备份交换器(.netCore2.0)
- Scott Mitchell 的ASP.NET 2.0数据教程之二十二:为删除数据添加客户端确认
- AspnetCore 2.0 自动API文档生成组件,支持protobuffer
- [置顶] 中间件系列二 RabbitMQ之消息持久性、确认机制、拒绝、预取数量、分配策略
- .netcore2.0 Startup 全局配置文件小技巧
- netCore2.0 加载DonetTools失败
- java线程之多个生产者消费者2.0
- SpringCloud 消费者端 集成 Swagger2.0启动报空指针错误_http://blog.163.com/wangjianssg@126/blog/static/2456955920161
- 04、NetCore2.0网页应用程序之Startup源码解析
- Scott Mitchell 的ASP.NET 2.0数据教程之四十二::为删除数据添加客户端确认
- netCore2.0 Api 跨域(Cors)