RabbitMQ在.NetCore中的使用

概述

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]

原文地址:https://www.cnblogs.com/muphalem/p/13777670.html