不确定如何在Orleans/Service Fabric中实现某些NServiceBus功能

不确定如何在Orleans/Service Fabric中实现某些NServiceBus功能,nservicebus,azure-service-fabric,orleans,Nservicebus,Azure Service Fabric,Orleans,我知道这是两个不同的系统,目的稍有不同,但在某种程度上,它们可以实现相同的目标,我想知道将我们的一些服务从NServiceBus(NSB)迁移到奥尔良或MS Service Fabric有多容易。我花了几个小时在高层次上学习什么是奥尔良和MS服务结构,但有些问题没有答案。我可以列出一些我想在迁移中保留的NSB功能吗?我希望您能告诉我奥尔良或Service Fabric是否支持类似的功能: 在NSB中,我们可以设置服务的最大线程数 应该在低成本的情况下运行,以便我们可以优先考虑低成本的服务 不太关

我知道这是两个不同的系统,目的稍有不同,但在某种程度上,它们可以实现相同的目标,我想知道将我们的一些服务从NServiceBus(NSB)迁移到奥尔良或MS Service Fabric有多容易。我花了几个小时在高层次上学习什么是奥尔良和MS服务结构,但有些问题没有答案。我可以列出一些我想在迁移中保留的NSB功能吗?我希望您能告诉我奥尔良或Service Fabric是否支持类似的功能:

  • 在NSB中,我们可以设置服务的最大线程数 应该在低成本的情况下运行,以便我们可以优先考虑低成本的服务 不太关键的服务上的延迟,具有高延迟。我可以吗 配置单个或多个应用程序上的最大实例数 奥尔良的谷物应该在什么条件下运转?我是 谈不同id的谷物

  • 我们的一些服务依赖于第三方服务呼叫 可能暂时无法使用。在这种情况下,例外情况是 通过配置的重试次数引发和运行消息。如果有的话 处理该消息的进一步尝试已结束(服务仍在继续) 不可用),消息被放入错误队列中,我们可以在其中看到 当第三方服务重新启动时,可以随时重新启动并重新处理 跟踪。我知道我们可以在奥尔良的基础上实施额外的工具 有一个类似的系统,但奥尔良或MS服务结构提供吗 在消息重试和失败方面,有些东西是开箱即用的 消息/呼叫存储在特殊位置或处于特殊状态

  • 在罕见的情况下,当我们的系统被客户端发起的传入消息过载时,消息会被忽略 卡在传入队列中,系统会采取一切可能的措施来处理 其余消息正在等待根据“第一个”进行处理 先到先得原则。我想奥尔良不能涵盖这一点 因为它听起来更像一个纯粹的排队概念, 但以防万一也许 有人会想办法把它迁移到奥尔良, 就像集成到某种排队系统中一样


  • NServiceBus端点完全可以托管在服务结构中。如果您选择无状态主机,那么实际上什么都不会改变。请参阅显示如何在Service Fabric或Service Fabric可靠参与者中设置主机的示例:这些是针对(虚拟)参与者的类似解决方案,但具有不同的权衡

    奥尔良和服务结构无状态服务:您可以通过SF运行奥尔良,您可以获得奥尔良版本的虚拟演员和SF的弹性

    NServiceBus vs Orleans(注意:我对NServiceBus只有非常基本的了解):NServiceBus来自无状态世界,在这个世界中,您可以持久化消息以提供可靠性,Orleans来自有状态世界,您可以持久化状态以获得可靠性。是的,在奥尔良的NServiceBus和Streams中有很多传奇故事,所以你可以在任何地方实现任何东西,尽管这些不同的方法(应该)会影响你的架构设计

    回答1:奥尔良谷物(演员)不是服务,数千、数百万、数十亿谷物给你服务。因此,您无法微调谷物之间的调度。Orleans grain并不是T类型所有消息的处理程序,通常有大量grain,grain更像是一个对象而不是一个类


    回答2、3:您可以使用奥尔良流实现这些传入和传出消息队列(这基本上是一个好概念),尽管奥尔良没有为您的错误队列、重新处理等提供现成的解决方案。但是奥尔良流不是一个简单的队列,通常您有大量的流,流是一个运行时可变的粒度通信图,因为粒度的数量很大,所以流的数量也很大。由于Orleans为您提供了async/await抽象,而不是处理grains之间的低级双向消息,因此流是多条单向消息的抽象。

    您想和我一起打个电话吗?我对ServiceFabric和Orleans以及NServiceBus很有经验,因为我为特定的软件工作。如果是的话,请在特定的互联网上给我发一封电子邮件给丹尼尔·多特·马尔巴赫