.net Azure服务结构和消息队列

.net Azure服务结构和消息队列,.net,message-queue,azure-service-fabric,.net,Message Queue,Azure Service Fabric,现在有了Azure Service fabric,是否也有使用单独队列解决方案(如Windows Service Bus)的用例?缺点可能是新的单点故障,但有好的方面吗?队列可以添加一些缓冲,但另一方面,服务结构应该能够很好地扩展并提供有状态的功能,因此不需要队列缓冲?当然,好处是Azure Service Bus和Azure Storage Queues等服务提供了服务结构中未包含的现成功能。因此,要问自己的问题是:您是添加外部服务依赖项以获得该功能,还是通过在服务结构上构建它来保持自包含性?

现在有了Azure Service fabric,是否也有使用单独队列解决方案(如Windows Service Bus)的用例?缺点可能是新的单点故障,但有好的方面吗?队列可以添加一些缓冲,但另一方面,服务结构应该能够很好地扩展并提供有状态的功能,因此不需要队列缓冲?

当然,好处是Azure Service Bus和Azure Storage Queues等服务提供了服务结构中未包含的现成功能。因此,要问自己的问题是:您是添加外部服务依赖项以获得该功能,还是通过在服务结构上构建它来保持自包含性?服务结构上的自包含应用程序是好的,但重新发明现有功能是坏的,因此您必须确定对您最有价值的地方,并朝着这个方向努力

例如,想想

  • 便携性。Service Fabric上自包含的应用程序可以托管在Service Fabric可以运行的任何地方,而Service Fabric几乎可以运行在任何地方(Azure、其他公共云、您自己的机器或数据中心等)
  • 没有外部依赖性意味着更少的故障点、单一的工具集以及统一的开发、部署、升级和维护过程
另一方面

  • 像服务巴士这样的服务提供了一个新的选择。是否值得花时间在Service Fabric上构建和维护您自己需要的功能
      问得好!我也在做这件事。在我的例子中,我使用RabbitMQ集群进行排队。我希望避免这种情况,并希望使用可靠的队列提供有状态的服务。我公开了一个将消息添加到服务中的方法,并使用RunAsync方法在消息到达时将其出列。与连接到RabbitMQ的无状态服务相比,使用这种方法的性能并没有给我留下深刻印象。但在我放弃之前,我计划将有状态服务划分为5个节点,并使用有状态服务(一个使用队列的工作者)查看性能是否有任何改进。

      我们的应用程序需要处理大量对话。我从5个有状态服务开始,每个服务都有自己的分区,使用可靠的Qs。分区用于帮助分配消息负载。按照这条路线,处理1000个MSG需要45秒。使用RMQ,跨3个分区的无状态服务,处理1000个MSG只需0.350秒!!!不仅在处理方面,而且不再需要有状态副本,这是一个巨大的显著改进。为了进一步修正我上面所说的,@Vaclav Turecek提到的缺点是应用程序的各个部分更加分散,而不是独立的。我们的一位工程师目前正在研究如何使用服务结构集群对RMQ进行集群。这方面还没有更新。我希望使用Azure服务总线,但公司不想与Azure捆绑在一起。您好@code5-出于兴趣,您最终用它做了什么?我一直在研究类似的方法,对上面的性能指标非常感兴趣。您是否将RabbitMQ视为来宾可执行文件或在容器中运行?您好@RobBird,实际上我们最初的想法是错误的,即如何托管RabbitMQ。你看,SFX是一个支持我们微服务的应用程序集群。对于数据库集群也是如此。因此,我们决定只生成几个Linux服务器(您也可以使用Windows)并托管我们的RMQueue集群。因为我们需要非常高的吞吐量,所以我们选择了兔子。消息服务总线提供了很好的维护方面。就价格而言,它们是可比的。如果不是因为高性能,我会选择MSB。总有一个折衷办法。@code5一个精简的Github要点对社区是有益的Vaclav,明白了,但对你来说,问题是,你知道SF消息队列的任何开源实现吗?我们的想法是,如果我们能把它带到社区中,那么我们就不必再创造轮子了。消息队列功能似乎不会经常更改,一旦项目编写完成,它将是相当静态的。