RabbitMQ 与 ASP.NET Core – 与 MassTransit 的微服务通信
在本文中,我们将看到使用 RabbitMQ 和 ASP.NET Core 进行微服务通信。我们将学习如何使用 RabbitMQ 和 MassTransit 启用微服务之间的通信。
我们将使用 MassTransit Helpers 从我们的 RabbitMQ 服务器发布/接收消息,
什么是消息代理
在进入主题 RabbitMQ 之前,我们将了解 Message Broker。Message Broker 的主要职责是在发布者和订阅者之间代理消息。
消息代理从生产者收到消息后,会将消息路由到订阅者。在解耦微服务时,消息代理模式是最有用的模式之一。
- 生产者:负责发送消息的应用程序。
- 消费者:负责消息的应用程序。
- 队列:存储消息的存储
什么是 RabbitMQ?
RabbitMQ 是使用最广泛的开源消息代理服务之一。它基本上为您的应用程序提供了一个用于发送和接收消息的通用平台。这确保了我们的消息(数据)永远不会丢失并被消费者成功接收,并且它支持各种消息传递协议。
强烈推荐
海量程序代码,编程资源,无论你是小白还是大神研究借鉴别人优秀的源码产品学习成熟的专业技术强势助力帮你提高技能与技能。在此处获取,给你一个全面升级的机会。只有你更值钱,才能更赚钱
RabbitMQ 的优点
使用队列而不是直接发送数据更好,有一些原因,
- 更高的可用性和更好的错误处理
- 更好的可扩展性
- 极其轻量级且非常易于部署
- 与想要/需要的人共享数据
- 异步处理带来更好的用户体验
RabbitMQ 设置演示
RabbitMQ 设置的简单演示。如果有任何消费者离线一段时间,消息仍然在 RabbitMQ 中等待消费者上线并接收消息。
支持的协议
RabbitMQ 支持多种协议,
- AMQP 0-9-1:RabbitMQ 最初开发为 AMQP 0-9-1。AMQP 0-9-1 是一个二进制协议,定义了非常强大的消息传递语义。
- STOMP:是一种基于文本的消息传递协议。
- MQTT:主要针对发布/订阅场景的二进制协议。
- AMOP 1.0
- HTTP 和 WebSocket:虽然 HTTP 不是真正的消息传递协议,但 RabbitMQ 可以通过 HTTP 传输消息
什么是MassTransit
MassTransit 本质上帮助开发人员通过消息服务总线路由消息,并支持 RabbitMQ。MassTransit 没有具体的实现。它基本上像一个接口一样工作,是整个消息总线概念的抽象。
设置环境
对于安装 RabbitMQ,有多种方法,我推荐方法 1,即通过 docker 镜像安装,
方法一
在本地机器上安装 ErLang 和 RabbitMQ,
- ErLang
- RabbitMQ
方法二
或者使用管理 Web 控制台运行 docker rabbitMQ。
docker run -dit --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
启用 RabbitMQ 管理插件-仪表板
要激活 RabbitMQ 管理仪表板,请使用管理员在命令提示符下运行以下命令。
cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.17\sbin
rabbitmq-plugins enable rabbitmq_management
net stop RabbitMQ
net start RabbitMQ
现在导航到 http://localhost:15672,您可以在其中找到正在运行的 RabbitMQ 管理仪表板。
管理的默认用户 ID 和密码是 guest/guest。
入门
应用程序中使用的 Nuget 库。
Install-Package MassTransit
Install-Package MassTransit.AspNetCore
Install-Package MassTransit.RabbitMQ
克隆 源代码 ,您可以通过解决方案资源管理器查看项目结构。我们遍历代码。
CrossCuttingLayer
这是所有应用程序的通用类库。这里我们有Model(即Todo 类)和Constant(用于RabbitMQ 配置)。
下面是 Todo 和 Constant 类的代码片段。
Todo.cs
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!