我正试图了解消息总线和国际奥委会,但我的脑子里充满了问题。
这就是我想到的场景
三台电脑通过局域网连接,无法访问互联网。这三台计算机各自运行一个服务,并自动自我发现其他计算机,换句话说,它们各自在公共总线上发送消息?这表明了他们自己的身份。
从那时起,他们可以交换任何类型的消息。
在第一个实例中,仅使用消息总线架构是否可以实现这一点?
如果是的话,自我发现位将如何工作?我看到的所有示例似乎都是特定于机器的本地队列。我似乎找不到向远程队列发送消息或完成自我发现的示例。
我有一个与 .Net 中的 rebus 一起使用的本地服务,但现在希望了解拼图中缺失的部分。
我现在并不是在谈论任何使用 ASP.Net 或任何东西的花哨设置。
任何帮助是极大的赞赏
所以我不知道画画,但我可以深入谈论MassTransit。
如果我希望一个没有互联网连接的系统能够自动注册总线,以便与对等方交换消息,我会想到两个主要选项。
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。一旦总线共享一个中心位置,所有对等点就可以进行通信。
拥有“两总线”系统。首先使用MSMQ的多播进行发现。基本上每分钟左右广播一条消息,直到找到中央服务器,然后启动另一条总线,如#1,但使用多播总线提供的地址。如果您使用 RabbitMQ,则意味着混合 RabbitMQ 和 MSMQ 总线。
第三种可能性(但不是很好)就是使用 MSMQ 的多播订阅客户端。这并不完美,因为多播不是为生产用途而设计的。但是,如果权衡可以接受,那么您可以使用它。 MSMQ 多播在服务开始执行和订阅完全协商之间存在启动延迟。如果您立即开始发布,这可能会导致消息丢失。多播需要同一子网上的所有计算机,或者使用路由器支持 vodoo magic*,以使多播能够跨子网工作。
值得注意的是,此时这与 IoC 无关。这实际上只是一个配置问题。 MassTransit 的想法是,一旦您注册了公交车,只要公交车的另一个成员向它发布消息 - 该消息将自动结束该消息的所有消费者。
*注意:我很确定不是黑巫毒魔法但就我而言,确实如此。您需要其他人的帮助才能完成这项工作。
第二个注意事项:对于 MSMQ,使用ReceiveFrom
在本地主机上排队。发送到远程主机的效果很好,但是当出现问题时,读取数据就很难诊断。
第三个注意事项:我每次都会在 MSMQ 上推广 RabbitMQ,除非您要求所有对等点都注册到 DTC。如果这是对你的要求,我祝你好运,克服所有的心痛。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)