我知道这是两个不同的系统,目的有点不同,但在某种程度上,在某些情况下,它们可以实现相同的目标,我想知道将我们的一些服务从NServiceBus(NSB)迁移到奥尔良或MS Service Fabric有多容易。我花了几个小时在高水平上学习奥尔良和MS Service Fabric是什么,但有些问题没有得到解答。我可以列出一些我想在迁移中保留的NSB功能吗?我希望你能告诉我Orleans或Service Fabric是否支持这样的功能:
-
在NSB中,我们可以设置服务的最大线程数量应该运行不足,这样我们就可以优先考虑低成本的服务具有高延迟的不太关键的服务的延迟。我可以吗在单个或多个应用程序上配置最大实例数量特定于奥的谷物应该运行的服务器?我是浅谈不同ids的晶粒
-
我们的一些服务依赖于第三方服务呼叫其可能暂时不可用。在这种情况下,例外情况是throw和消息通过配置的重试次数运行。如果全部处理消息的进一步尝试已经结束(服务仍然不可用),消息被放入错误队列中,我们可以在其中看到并在第三方服务重新启动时随时重新处理轨道我知道我们可以在奥尔良的基础上实施额外的工具有类似的系统,但奥尔良或MS Service Fabric提供在消息重试和失败方面有一些开箱即用的东西消息/呼叫存储在特殊位置或特殊状态下?
-
在极少数情况下,当我们的系统被客户端发起的传入消息过载时,消息被困在传入队列中,系统会采取一切可能的措施来处理其余消息正在等待轮到根据"第一个"处理先到先得原则。我想奥尔良无法报道此事需求,因为它听起来更像是一个纯粹的排队概念,但以防万一有人会想到如何将其迁移到奥尔良,类似于集成到某种排队系统
Orleans或Service Fabric可靠参与者:这些是针对(虚拟)参与者的类似解决方案,但有不同的权衡。https://richorama.github.io/2016/07/08/orleans-vs-service-fabric/
奥尔良和服务结构无状态服务:你可以在SF上运行奥尔良,你可以获得奥尔良版本的虚拟演员和SF的弹性。
NServiceBus与Orleans(注意:我对NServiceBus只有非常基本的了解):NServiceBus来自于无状态世界,在那里你可以持久化消息以提供可靠性,Orleans来自于有状态世界,你可以持久性参与者状态以提供可靠性。是的,NServiceBus中有Sagas,Orleans中有Streams,所以您可以在任何地方实现任何东西,尽管这些方法(应该)会影响您的架构设计。
答案1:奥尔良谷物(行动者)不是服务,成千上万、数百万、数十亿的谷物给了你服务。因此,您无法对粮食之间的调度进行微调。奥尔良粒度并不是所有T类型消息的处理程序,通常你有大量的粒度,粒度更像是一个对象而不是一个类。
答案2,3:你可以用奥尔良流实现这些传入和传出消息队列(这基本上是一个好概念),尽管奥尔良没有为你的错误队列、再处理等提供开箱即用的解决方案。但奥尔良流不是一个简单的队列,通常你有大量的流,流是一个运行时可变的粒度通信图,因为颗粒的数量大,所以流的数量也大。由于Orleans为您提供了异步/等待抽象,而不是处理颗粒之间的低级别双向消息传递,因此流是多个单向消息的抽象。
NServiceBus端点完全可以托管在Service Fabric中。如果你选择无状态托管,什么都不会改变。查看示例https://docs.particular.net/nservicebus/hosting/service-fabric-hosting/显示了如何在Service Fabric 中设置主机