.NET Core 微服务使用 RabbitMQ [关闭]
Posted
技术标签:
【中文标题】.NET Core 微服务使用 RabbitMQ [关闭]【英文标题】:.NET Core Microservice using RabbitMQ [closed] 【发布时间】:2017-09-15 07:41:52 【问题描述】:我计划在一个项目中使用微服务架构。选择的技术栈是.NET Core
,其中Docker
和RabbitMQ
作为简单的服务总线,应该可以部署在Linux
上。
假设我有一个Payment
服务和一个Order
服务,我希望这些服务中的每一个都公开REST
端点。因此,我想将这两个服务设为.NET Core Web APIs
。
但问题是使用RabbitMQ
的服务间通信。每当我得到一个新的order
时,我想使用RabbitMQ
发布一个事件,然后在Payment
服务中监听该事件以执行某些操作(数据库更新)。但由于这些是Web APIs
,我认为不可能像我描述的那样收听事件。 (我觉得我可能不得不使用控制台应用程序之类的东西来订阅事件。)
考虑到系统的可扩展性和可扩展性,我想通过最佳实践找到最可行的方法来实现这一目标。
【问题讨论】:
ASP.NET Core 应用程序是控制台应用程序。您可以简单地创建一个对象,该对象将在应用程序启动时侦听消息以及 WebAPI 注册.. @AndriiLitvinov,感谢您的回复。你能解释一下你的建议吗? 【参考方案1】:当您使用 .NET Core 创建应用程序时,您会在 Main
方法中引导事物,然后在 Startup
类中注册服务和中间件。因此,在您启动虚拟主机之前,您还可以创建并启动您的消息服务:
public class MessageListener
public void Start()
// Listen to rabbit QM and all the things.
public static void Main(string[] args)
// Listen to messages.
var messaging = MessageListener();
messaging.Start();
// Configure web host and start it.
var host = new WebHostBuilder()
...
.Build();
host.Run();
更新:
在 ASP.NET Core 2.0 中引入了IHostedService
接口来实现相同的目标,他们在announcement 中提到了这种情况。这是an example 的实现方法。
【讨论】:
那么你的意思是,即使在 .NET Core Web API 项目中,我也可以简单地注册我的侦听器来处理将由其他服务发布的事件? 是的,就是这样。如果子域的逻辑是在服务中实现的,那么命令的发送方式无关紧要:通过 Web api 或通过消息队列。 谢谢,您认为这样处理是个好主意吗?会有什么缺点吗? 这就是我在项目中的做法。微服务的思想是实现一个有界上下文(一个子域或它的一部分)。它内部应该有一个域模型,可以从 Web api 控制器或消息处理程序访问。 @PIKP,如果这仍然与您相关,请检查更新。以上是关于.NET Core 微服务使用 RabbitMQ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章