.Net Core使用RabbitMQ(一)

简介

先来一段官方简介:RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。

操作 RabbitMQ

为了更直观的看到效果,本文仅演示控制台应用。

安装看这里:RabbitMQ安装

然后打开VS新建两个控制台应用(一个生产者,一个消费者)。分别引入nuget包rabbitmq.client:

编写生产者代码(直接拷代码上来很乱,只好直接放图了):

.Net Core使用RabbitMQ(一)_第1张图片

编写消费者代码:

.Net Core使用RabbitMQ(一)_第2张图片

接下来分别启动生产者和消费者进行测试即可,运行结果:

.Net Core使用RabbitMQ(一)_第3张图片

如果有N个消费者,rabbitmq会自动区分投递,比如:

.Net Core使用RabbitMQ(一)_第4张图片

消费失败

rabbitmq采用应答机制,就是说消费者收到消息后发送回执,rabbitmq就会将对应消息从队列中移除。如果消费过程中出现异常导致消费者断线,rabbitmq会重新投递消息。如果有多个消费者连接,会立即投递给其他消费者。修改一下消费者代码重新运行:

.Net Core使用RabbitMQ(一)_第5张图片

现在,消费者会延迟5秒发送消费回执:

.Net Core使用RabbitMQ(一)_第6张图片

如果在5秒内发生掉线,rabbitmq会重新投递。如果同时有多个消费者,会立即投递给其他消费者:

.Net Core使用RabbitMQ(一)_第7张图片
生产者、消费者1、消费者2
.Net Core使用RabbitMQ(一)_第8张图片
生产者、消费者1

消费者2 收到消息内容 7 ,这时我将 消费者2 断线,内容为7的消息直接被rabbitmq投递到 消费者1。如果唯一的消费者断线了,那么尚未处理的消息会在队列中保存,下一次连线时会一并推送过去,直到消费完毕。

你可能感兴趣的:(.Net Core使用RabbitMQ(一))