首页 > 解决方案 > Net Core 中的 WebApi 使用 RabbitMQ

问题描述

我对 RabbitMQ 世界和微服务架构非常陌生。我在 youtube 上看过一些关于如何使用 rabbitMQ 的教程,但我有一些问题想问。

1.)如果客户端将数据发布到我的 api 控制器并且我的 api 控制器将数据发布到队列中,那么在 rabbitMQ 上处理数据时响应发布请求的正确方法是什么?因为从教程中,即使数据尚未完成,它也只会返回“Ok(Http Code 200)”。

2.) 消费者可以订阅超过 1 个队列吗?如果是,startup.cs 上是否有任何配置示例?

3.) 有没有在 .NetCore 上使用 rabbitMQ 来处理“真实世界”案例的示例?请告诉我。

谢谢

标签: asp.net-core.net-corerabbitmqmicroservicesasp.net-core-webapi

解决方案


  1. 返回 200 完全没问题。这只是微服务架构的众多权衡之一。例如,从性能的角度来看,您可以提前返回 200 并通过分布式系统的其余部分异步传播所有更改,这是很有效的。另一方面,它增加了您需要接受的另一种复杂性——最终一致性。这个概念有点描述你问的问题。假设您的客户端收到 200,但如果它立即调用另一个微服务,客户端可能看不到前一个请求引入的更改,因为更改可能尚未传播。您需要决定它在您的项目中是否可以接受。如果不是,也许您应该重新设计将业务域拆分为微服务的方式,尝试将事务性接近的实体组合在一起以缓解此类问题。如果你真的不能容忍最终一致性,也许你应该放弃特定项目的微服务。

  2. 可以,例如,您可以为每个侦听消息的队列创建 IHostedService 的实现,并通过在 startp.cs 中注册它们与您的 asp net core 应用程序并行运行它们

  3. 您可以通过以下链接在存储库中找到它。他们使用 RabbitMQ。尽管有一些抽象可能会使其更难掌握,但它是一个很棒的实现,并且有记录在免费电子书中的好处。

https://github.com/dotnet-architecture/eShopOnContainers/ - 我不能强调这个存储库如何帮助我理解微服务。Microsoft 文档中还有一本关于此 repo 的免费电子书:https ://docs.microsoft.com/en-us/dotnet/architecture/microservices/ 。他们处理诸如最终一致性和异步通信等概念。这正是您要寻找的。


推荐阅读