概述
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。
使用
安装Nuget包
连接
生产者
创建队列
可以看到除了QueueDeclare之外还有两种声明队列的方法。
QueueDeclareNoWait:无返回值版
QueueDeclarePassive:用来检查队列是否存在
发布消息
关闭通道及连接
消费者
定义消费者
接收消息
RabbitMQ采用消息应答机制,即消费者收到一个消息之后,需要发送一个应答,然后RabbitMQ才会将这个消息从队列中删除,如果消费者在消费过程中出现异常,断开连接却没有发送应答,那么RabbitMQ会将这个消息重新投递。
确认消息已被消费
或在启动消费者时将此参数传为true即可自动应答
启动消费者
设置手动应答消息
关闭通道及连接
交换机Exchange
AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储。同理,消费者也是如此。Exchange 就类似于一个交换机,将各个消息分发到相应的队列中。
RabbitMQ提供了四种Exchange模式:direct,fanout,topic,header
direct模式:转发给routeKey完全匹配的队列,在发布消息时未指定Exchange的情况下使用的rabbitMQ自带default Exchange即direct模式
fanout模式:Exchange与队列进行绑定操作,转发给与之绑定的队列
topic模式:与routeKey模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词
header模式:使用Headers(键值对)来匹配队列,使用较少
引用
部分资料来源于 晓晨Master
[https://www.cnblogs.com/stulzq/p/7551819.html]