asp.net-core - Net Core 中的 WebApi 使用 RabbitMQ
问题描述
我对 RabbitMQ 世界和微服务架构非常陌生。我在 youtube 上看过一些关于如何使用 rabbitMQ 的教程,但我有一些问题想问。
1.)如果客户端将数据发布到我的 api 控制器并且我的 api 控制器将数据发布到队列中,那么在 rabbitMQ 上处理数据时响应发布请求的正确方法是什么?因为从教程中,即使数据尚未完成,它也只会返回“Ok(Http Code 200)”。
2.) 消费者可以订阅超过 1 个队列吗?如果是,startup.cs 上是否有任何配置示例?
3.) 有没有在 .NetCore 上使用 rabbitMQ 来处理“真实世界”案例的示例?请告诉我。
谢谢
解决方案
返回 200 完全没问题。这只是微服务架构的众多权衡之一。例如,从性能的角度来看,您可以提前返回 200 并通过分布式系统的其余部分异步传播所有更改,这是很有效的。另一方面,它增加了您需要接受的另一种复杂性——最终一致性。这个概念有点描述你问的问题。假设您的客户端收到 200,但如果它立即调用另一个微服务,客户端可能看不到前一个请求引入的更改,因为更改可能尚未传播。您需要决定它在您的项目中是否可以接受。如果不是,也许您应该重新设计将业务域拆分为微服务的方式,尝试将事务性接近的实体组合在一起以缓解此类问题。如果你真的不能容忍最终一致性,也许你应该放弃特定项目的微服务。
可以,例如,您可以为每个侦听消息的队列创建 IHostedService 的实现,并通过在 startp.cs 中注册它们与您的 asp net core 应用程序并行运行它们
您可以通过以下链接在存储库中找到它。他们使用 RabbitMQ。尽管有一些抽象可能会使其更难掌握,但它是一个很棒的实现,并且有记录在免费电子书中的好处。
https://github.com/dotnet-architecture/eShopOnContainers/ - 我不能强调这个存储库如何帮助我理解微服务。Microsoft 文档中还有一本关于此 repo 的免费电子书:https ://docs.microsoft.com/en-us/dotnet/architecture/microservices/ 。他们处理诸如最终一致性和异步通信等概念。这正是您要寻找的。
推荐阅读
- scala - Spark SQL - Scala - 聚合函数作为创建 DF 列的参数
- c# - 每次重建后都会重置 Asp.Net 5 身份验证 cookie - 我怎样才能真正坚持下去?
- python - 使用 python-docx 和 xml 修改段落
- r - 您可以使用数据框来协助 R 中的“查找和替换”吗
- docker - 通过 Docker 或 Docker Compose 的 GDAL 图像依赖
- api - 无法遍历服务器不和谐 API 的成员
- macos - OSX 修复 Selenium Chromedriver 启动错误产生未知系统错误 -86 可执行文件中的错误 CPU 类型?
- google-cloud-dataflow - 完成后将数据流作业状态发布到 Google Pub/Sub
- php - 如何在 curl PHP 中假装是一个网站?
- java - 从响应中获取对象列表