`

rabbitmq-BasicQos

 
阅读更多

转自:http://www.cnblogs.com/haoxinyue/archive/2012/10/01/2709644.html

 

QoS = quality-of-service, 顾名思义,服务的质量。通常我们设计系统的时候不能完全排除故障或保证说没有故障,而应该设计有完善的异常处理机制。在出现错误的时候知道在哪里出现什么样子的错误,原因是什么,怎么去恢复或者处理才是真正应该去做的。在接收消息出现故障的时候我们可以通过RabbitMQ重发机制来处理。重发就有重发次数的限制,有些时候你不可能不限次数的重发,这取决于消息的大小,重要程度和处理方式。

甚至QoS是在接收端设置的。发送端没有任何变化,接收端的代码也比较简单,只需要加如下代码:

channel.BasicQos(0, 1, false);

代码第一个参数是可接收消息的大小的,但是似乎在客户端2.8.6版本中它必须为0,即使:不受限制。如果不输0,程序会在运行到这一行的时候报错,说还没有实现不为0的情况。第二个参数是处理消息最大的数量。举个例子,如果输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息,消息只会在队列中阻塞。如果输入3,那么可以最多有3个消息不应答,如果到达了3个,则发送端发给这个接收方得消息只会在队列中,而接收方不会有接收到消息的事件产生。总结说,就是在下一次发送应答消息前,客户端可以收到的消息最大数量。第三个参数则设置了是不是针对整个Connection的,因为一个Connection可以有多个Channel,如果是false则说明只是针对于这个Channel的。

这种数量的设置,也为我们在多个客户端监控同一个queue的这种负载均衡环境下提供了更多的选择。

分享到:
评论

相关推荐

    rabbitmq-access, rabbitmq手动确认模式java封装.zip

    这可以通过设置`basicQos`的参数`prefetchSize`为0和`prefetchCount`为一个合适的值来实现。 手动确认模式与Java封装结合使用,可以显著提高RabbitMQ消息处理的可靠性。但同时,也需要注意,手动确认模式可能会增加...

    RabbitMQ-Demo

    默认情况下,消费者接收的消息会被自动确认,也可以通过设置`basicQos`参数为false启用手动确认,让消费者在处理完消息后显式发送确认。 10. **异常处理和连接恢复** 应该对可能出现的网络故障、服务器宕机等异常...

    RabbitMQ基础教程

    - **实现**:通过设置`channel.BasicQos(0, 1, false)`来启用公平分发模式,使得消息能够在消费者间更均衡地分配。 #### 五、RabbitMQ客户端工具 - **Web UI**: RabbitMQ自带了一个Web管理界面,可以通过浏览器...

    RabbitMQ的工作队列和路由.doc

    - **公平(Fair)**:通过`basicQos`方法设置预取计数(`prefetchCount`),可以控制每个消费者同时处理的消息数量。这种方式更适合处理能力不均衡的消费者场景。 ##### 2.3 消息确认 为了确保消息被正确处理,RabbitMQ...

    rabbitMQ笔记.docx

    通过设置`channel.BasicQos(1)`,可以确保RabbitMQ在同一时间只向一个消费者发送一条消息,避免消息过快被消费导致负载不均。 在实际应用中,RabbitMQ的这些特性使得它成为了一个强大的消息中间件,适用于构建高...

    RabbitMQ

    - **Consumer Behavior**:多个消费者共享一个队列,通过`channel.basicQos(1)`方法限制每次仅能处理一个消息。 ##### 6.3 Publish/Subscribe Mode (发布/订阅模式) - **Exchange Type**:设置为“fanout”。 - **...

    gradle_RabbitMQ:练习Gradle和RabitMQ!

    channel.basicQos(1); // 限制并发处理消息的数量 final Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.Basic...

    【ASP.NET编程知识】c# rabbitmq 简单收发消息的示例代码.docx

    channel.BasicQos(0, 1, false); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body)...

    rabbit-mq-ack-direct-consumer.zip

    当消费者开启确认模式(channel.basicQos(0, true)),它需要显式地发送一个确认(ACK)信号给RabbitMQ,表示消息已经被成功处理,这时RabbitMQ才会真正删除消息。如果消费者在处理消息期间出现问题而没有发送ACK,...

    c# rabbitmq 简单收发消息的示例代码

    在本文中,我们将深入探讨如何使用C#与RabbitMQ进行简单的消息收发。RabbitMQ是一个开源的消息代理和队列服务器,它允许应用程序之间通过消息进行异步通信。C#是.NET框架的主要编程语言,提供了丰富的库来与RabbitMQ...

    RabbitMQTrial.zip

    channel.BasicQos(0, 1, false); // 设置全局预取值为1,表示一次只能处理一个消息 ``` 接下来,我们将关注确认模式。RabbitMQ 提供了两种确认模式:自动确认和手动确认。在自动确认模式下,一旦消费者接收到消息,...

    3.6:消费端如何做限流量1

    在IT行业中,消息队列(MQ)如RabbitMQ常用于解耦系统,处理高并发场景下的订单等业务数据。然而,当订单高峰期到来时,可能会导致MQ的Broker上积累大量未处理的消息。此时,如果不加以控制,快速将这些消息推送到...

    rapidmq_work

    你可以启用或禁用此功能,通过`model.BasicQos()`设置预取大小,并使用`model.BasicAck()`确认消息已被处理。 6. **异常处理和关闭连接**:在C#代码中,应该妥善处理可能出现的异常,例如网络中断或服务器错误。...

Global site tag (gtag.js) - Google Analytics