【问题标题】:Mastransit - publish vs send and how to manage messageMasstransit - 发布与发送以及如何管理消息
【发布时间】:2018-07-22 15:44:55
【问题描述】:

我刚刚在我的项目 .Net core2.0 中使用了 MassTransit。这很棒,但也有一些问题:

  • 发布与发送是不同的。在我的场景中,我有一个电子邮件服务可以向外部发送电子邮件。其他服务将通过 RabbitMQ 将请求传递给电子邮件服务。因此,在这种情况下,我们应该使用“发布”或“发送”。

  • 使用 Send,我们需要传递端点的完整 URL。有管理端点的最佳实践吗?因为如果我们有 10 个命令,我们需要管理 10 个端点。对吗?

  • 与事件(发布)相关,如果一项服务部署在多个实例上,则当一个事件发布到队列时。它将在每个实例上处理一次或多次处理。

  • 能否请您分享一个针对消费者的单元测试?因为通过线束测试,我们似乎只是确保消息已排队。

  • Masstransit 准备好迎接 .Net Core 2.1 了吗?

非常感谢,

【问题讨论】:

标签: asp.net-core-2.0 masstransit


【解决方案1】:

一篇帖子的问题太多了,所以最好 一个一个地问更具体的问题。您的一些问题已经有了关于 SO 的答案。

发布事件和发送命令的区别和你想象的差不多。我们实际上在documentation 中介绍了其中的一些内容。

您可以在一个接收端点中处理任意数量的消息类型,但您需要了解后果。最佳实践是为每种命令类型设置一个端点,或至少为相关命令设置一个端点。这里的风险是一个重要的命令可能会在队列中等待,直到处理其他不太重要的命令。

如果您发布事件,每个端点(队列)都会获得它的副本。如果您有一个端点的多个实例,则只有其中一个实例会获得它。它也适用于发送命令,但只有一个端点会收到消息,并且只有一个实例会处理它。

虽然目前还没有 MT 测试的文档,但您可以查看 this test 了解它是如何完成的。

MassTransit 是为 .NET 4.6 和 .NET Standard 2.0 编译的。 .NET Core 2.1 中没有什么特别的不同会对 MassTransit 产生任何影响。

【讨论】:

  • - 谢谢,通过您的回答,我了解到许多实例部署了一项服务,其中只有一个实例可以获取消息并对其进行处理。因为它们都连接到同一个队列。 - 与单元测试有关,我之前检查过这个链接。但似乎我们只检查此消息是否已发送。我们不运行和测试“消费者”代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多