前文中也多次提到消息传输的一些概念,这一篇比较全面的介绍一下,然后补充一些内容。
消息的应答
RabbitMQ有两种应答模式,自动和手动。这也是AMQP协议所推荐的。这在point-to-point和broadcast都是一样的。
自动应答-当RabbitMQ把消息发送到接收端,接收端把消息出队列的时候就自动帮你发应答消息给服务。
手动应答-需要我们开发人员手动去调用ack方法去告诉服务已经收到。
文档推荐在大数据传输中,如果对个别消息的丢失不是很敏感的话选用自动应答比较理想,而对于那些一个消息都不能丢的场景,需要选用手动应答,也就是说在正确处理完以后才应答。如果选择了自动应答,那么消息重发这个功能就没有了。
消息的拒收
拒收,是接收端在收到消息的时候响应给RabbitMQ服务的一种命令,告诉服务器不应该由我处理,或者拒绝处理,扔掉。接收端在发送reject命令的时候可以选择是否要重新放回queue中。如果没有其他接收者监控这个queue的话,要注意一直无限循环发送的危险。
BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
channel.BasicReject(ea.DeliveryTag, false);
BasicReject方法第一个参数是消息的DeliveryTag,对于每个Channel来说,每个消息都会有一个DeliveryTag,一般用接收消息的顺序来表示:1,2,3,4 等等。第二个参数是是否放回queue中,requeue。
BasicReject一次只能拒绝接收一个消息,而BasicNack方法可以支持一次0个或多个消息的拒收,并且也可以设置是否requeue。
channel.BasicNack(3, true, false);
在第一个参数DeliveryTag中如果输入3,则消息DeliveryTag小于等于3的,这个Channel的,都会被拒收。
消息的QoS
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的这种负载均衡环境下提供了更多的选择。
相关推荐
1. **RabbitMQ基础**:RabbitMQ是一个基于AMQP协议的消息中间件,允许应用程序之间进行异步通信,确保消息的可靠传输。它支持多种编程语言的客户端,如Java、Python、Ruby、.NET等。 2. **Erlang**:Erlang是...
RabbitMQ还提供了高可用性、镜像队列、集群等特性,确保消息的可靠传输和系统的稳定性。 总之,"rabbitmq-server-3.8.5-window.zip"包含的是RabbitMQ Server 3.8.5版本的Windows安装程序,它提供了一个强大的消息...
1. **消息队列原理**:RabbitMQ基于AMQP(Advanced Message Queuing Protocol)协议,它提供了一种可靠的消息传递机制,确保消息在生产者和消费者之间正确传输,即使在高并发、网络不稳定或服务暂时不可用的情况下。...
**RabbitMQ 3.8.9:一个强大的消息队列系统** ...通过下载并安装 "rabbitmq-server-3.8.9.zip",用户可以在 Windows 64 位环境下轻松部署和使用这一优秀工具,为分布式系统提供关键的通信基础设施。
1. **性能优化**:RabbitMQ 3.7.x系列持续对内部算法和数据结构进行优化,以提高消息处理速度和内存使用效率。 2. **稳定性提升**:修复了多个已知的bug,增强了系统的稳定性,减少了服务中断的可能性。 3. **监控...
- **消息**:消息是通过 RabbitMQ 进行传输的数据单元,可以是任何格式,通常以 JSON 或 XML 形式存在。 - **交换机(Exchange)**:交换机负责接收生产者发送的消息,并根据预定义的路由规则将其分发到相应的队列。...
RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,被广泛用于处理分布式系统中的异步任务和消息传递。这个“rabbitmq_server-3.0.4.tar.gz”文件是RabbitMQ 3.0.4...
- 生产者:使用客户端库(如 Java, Python, .NET 等)发送消息到 RabbitMQ 队列。 - 消费者:同样通过客户端库订阅队列,接收并处理消息。 - 队列与交换器:队列存储消息,交换器根据路由规则将消息分发到对应的队列...
7. **安全性**:RabbitMQ使用访问控制列表(ACLs)来控制用户对资源的访问,同时支持SSL/TLS加密,以保护消息的安全传输。 8. **监控和日志**:RabbitMQ提供了监控和日志记录工具,帮助管理员了解系统状态,诊断...
1. LICENSE:这通常包含该软件的许可协议,允许用户在特定条件下使用、修改和分发该软件。在 RabbitMQ 的上下文中,这可能指的是该客户端库的开源许可信息。 2. LICENSE-APACHE2:Apache License Version 2.0 是一个...
总结起来,这个C# Demo项目旨在教会我们如何在.NET环境中使用RabbitMQ进行消息传递,通过封装RabbitMQ.Client库,我们可以更高效地利用交换机功能,实现不同场景下的消息路由。通过学习这个项目,开发者能够更好地...
5. **消息(Message)**:在RabbitMQ中传输的基本单元,包含负载和一系列的属性。 6. **生产者(Producer)**:发布消息到RabbitMQ的应用。 7. **消费者(Consumer)**:从队列中接收消息的应用。 在Windows上管理...
RabbitMQ是基于AMQP协议的消息中间件,用于在不同应用之间传输消息。它在许多场景下有着广泛的应用,例如微服务架构、异步任务处理、解耦系统组件等。RabbitMQ的关键特性包括: 1. **多协议支持**:除了AMQP,还...
RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)协议,允许应用程序之间进行异步通信,确保数据的可靠传输。RabbitMQ 3.7.8是该软件...
7. **连接和信道(Connection and Channel)**:在RabbitMQ中,连接是到服务器的网络连接,而信道是实际进行消息传输的逻辑通道。ASP.NET代码会建立到RabbitMQ服务器的连接,并创建一个或多个信道进行消息的发送和...
RabbitMQ 是一个广泛使用的开源消息代理,支持多种协议,包括 AMQP(Advanced Message Queuing Protocol)。在本文中,我们将深入探讨如何在 .NET Core 的最新版本 Net6.0 下集成和使用 RabbitMQ。 首先,我们需要...
本文将重点讨论如何在.NET Core环境下使用RabbitMQ进行开发,参考了CSDN博主yysyangyangyangshan的文章。 首先,我们需要理解.NET Core与RabbitMQ结合的基本概念。.NET Core是一个跨平台的开源开发框架,它允许我们...
在RabbitMQ中,生产者是发送消息的应用程序,消费者是接收消息的应用程序,而消息则在两者之间通过队列进行传输。队列是一种先进先出(FIFO)的数据结构,存储等待处理的消息,直到被消费者消费或过期。 AMQP协议是...
RabbitMQ是一种广泛使用的开源消息代理,它遵循AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中高效地传输数据。`rabbitmq-c`为PHP提供了一个接口,使得开发者能够在PHP应用程序中方便地使用...
RabbitMQ是一种广泛使用的开源消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,适用于多种编程语言,包括Java、Python、Ruby、.NET等。"RabbitMQ实战-RabbitMQInAction"的资料很可能是...