gpt4 book ai didi

masstransit - 消息总线中的总线发现

转载 作者:行者123 更新时间:2023-12-01 12:42:01 28 4
gpt4 key购买 nike

我正在努力了解消息总线和 ioc,但我的脑袋里充满了问题。

这是我的设想

三台电脑通过局域网连接,无法上网。这三台计算机各有一个运行并自动 self 发现其他计算机的服务,换句话说,它们各自在公共(public)总线上发送消息??标识自己。

从那时起,他们可以交换任何类型的消息。

这在第一个实例中仅使用消息总线架构是可能的吗?

如果是, self 发现位将如何工作?我看到的所有示例似乎都是特定于机器的本地队列。我似乎找不到向远程队列发送消息或完成 self 发现的示例。

我有一个在 .Net 中使用 rebus 的本地服务,但现在希望了解拼图中缺失的部分。

目前我不是在谈论任何使用 ASP.Net 或任何东西的奇特设置。非常感谢任何帮助

最佳答案

所以我不知道 rebus,但我可以深入讨论 MassTransit。

如果我希望没有 Internet 连接的系统能够自动注册到总线中,以便它可以与其对等方交换消息,我会想到两个主要选项。

  1. RabbitMQ 或 MSMQ 有一个已知的中央位置,每个实例都连接到该位置。使用 RabbitMQ,每个人都使用的 RabbitMQ 实例很简单,例如 rabbitmq://10.0.0.10/my_queue 作为配置中的 ReceiveFrom 地址。对于 MSMQ,订阅服务队列位置为 msmq://10.0.0.10/mt_subscriptions。然后 ReceiveFrom 队列应该是 msmq://localhost/my_queue。一旦总线共享一个中心位置,那么所有对等点都可以通信。

  2. 拥有“双总线”系统。首先使用MSMQ的多播进行发现。基本上每分钟左右广播一条消息,直到找到中央服务器,然后启动另一条总线,如#1,但使用多播总线提供的地址。如果您使用 RabbitMQ,则意味着混合使用 RabbitMQ 和 MSMQ 总线。

  3. 第三种但不是很好的可能性是使用 MSMQ 的多播订阅客户端。这并不完美,因为多播不是为生产用途而设计的。但是,如果折衷可以接受,那么您可以使用它。 MSMQ 多播在服务开始执行和订阅完全协商之间有一个启动滞后。如果您立即开始发布,这可能会导致消息丢失。多播需要同一子网中的所有机器或使用路由器的 back vodoo magic* 才能使多播跨子网工作。

值得注意的是,此时这与 IoC 无关。这实际上只是一个配置问题。 MassTransit 的想法是,一旦你注册了一辆公共(public)汽车,只要公共(public)汽车的另一名成员向它发布消息——该消息将自动结束给该消息的所有消费者。

*注意:我很确定这不是黑伏都教魔法,但就我而言它是。您需要其他人的帮助才能完成这项工作。

第二个注意事项:对于 MSMQ,使用本地主机上的 ReceiveFrom 队列很重要。发送到远程主机工作得很好,但是当出现问题时,从中读取就更难诊断了。

第三条注意:我每次都会通过 MSMQ 提升 RabbitMQ,除非您要求所有对等方都注册 DTC。如果这是对你的要求,我祝你好运,克服所有的心痛。

关于masstransit - 消息总线中的总线发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488670/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com