Service Fabric - 本地集群 - 排队
Service Fabric - Local Cluster - Queuing
我处于可以使用 Service Fabric(本地)但无法利用 Azure 服务总线(或任何东西 "cloud")的情况。 queuing/pub-sub 的推论是什么? Service Fabric 是允许的,因为它能够 运行 在本地容器中,并且是 "free"。其他第 3 方消息传递基础设施,如 RabbitMQ,也已关闭 table(目前)。
我已经使用基于 MSMQ 和 WCF 的本地开发的总线构建了系统,但我不知道如何在 SF 中完成同样的事情。我怀疑我可以让 SF 服务使用公开 msmq 的自定义 ICommunicationListener,但它只能在集群内部使用(我理解的方式)。我可以在它们前面构建一个 HTTPBridge(在 SF 中),使它们在集群外可用,但那样我就会失去生命周期解耦(客户端能够调用服务,使用队列,即使该服务不在线当时)因为桥本身不会从排队的任何方面受益。
我有几种可能性,但都患有一些只因 SF 而存在的局部疾病。此外,相同的代码需要轻松部署到完整的 Azure SF(我可以在其中使用 ASB 并且此问题消失),因此我不想仅仅因为在某些情况下托管它的位置而构建两个单独的系统。
感谢任何提示。
- 您可以自己构建,例如 like this。这使用
BrokerService
将消息数据分发给订阅的服务和参与者。
- 您还可以运行一个容器化的排队平台like RabbitMQ with volumes。
通过运行在集群内设置队列系统,您将不会引入外部依赖。
问题不在于 SF,您设计的主要问题是您将架构要求与实现相结合。 SF 在 VirtualMachines 之上运行,最后,唯一的区别是 SF 将服务放在这些机器中,使用另一种解决方案,您将有一个代理在其中部署这些服务或进行手动部署。挑战是一样的。
从描述中可以看出,你的设计需求是需要一个消息队列,无论是Service Bus、RabbitMQ还是MSMQ,队列的概念都是一样的。然后每个人都将具有队列的基本基础以及每个实现的细节,有些可能会添加事务,有些可能会实现多种模式,等等。
如果您根据特定的实现进行设计,您会将您的解决方案与实现相结合,使您的解决方案难以维护并面临您描述的挑战。
NServiceBus 和 Masstransit 等解决方案减少了代码中的大量耦合,如果您认为这些还不够,可以创建自己的抽象。然后使用配置将业务逻辑与实现联系起来。
Despite the above advice, I would not recommend you using different
solutions per environment, because as said previously, each solution
has it's own implementations and they might not assimilate to each other, as example, you might face issues in
production because you developed against MSMQ on DEV and TEST
environments, and when deployed to Production you use ServiceBus, they
have different limitations, like message size, retention period and son
on.
如果您愿意使用 MSMQ,您可以将 MSMQ 添加到 VM 运行 您的集群中,并从您的服务进行连接而不会出现任何问题。首先看一下这个 SO:
我处于可以使用 Service Fabric(本地)但无法利用 Azure 服务总线(或任何东西 "cloud")的情况。 queuing/pub-sub 的推论是什么? Service Fabric 是允许的,因为它能够 运行 在本地容器中,并且是 "free"。其他第 3 方消息传递基础设施,如 RabbitMQ,也已关闭 table(目前)。
我已经使用基于 MSMQ 和 WCF 的本地开发的总线构建了系统,但我不知道如何在 SF 中完成同样的事情。我怀疑我可以让 SF 服务使用公开 msmq 的自定义 ICommunicationListener,但它只能在集群内部使用(我理解的方式)。我可以在它们前面构建一个 HTTPBridge(在 SF 中),使它们在集群外可用,但那样我就会失去生命周期解耦(客户端能够调用服务,使用队列,即使该服务不在线当时)因为桥本身不会从排队的任何方面受益。
我有几种可能性,但都患有一些只因 SF 而存在的局部疾病。此外,相同的代码需要轻松部署到完整的 Azure SF(我可以在其中使用 ASB 并且此问题消失),因此我不想仅仅因为在某些情况下托管它的位置而构建两个单独的系统。
感谢任何提示。
- 您可以自己构建,例如 like this。这使用
BrokerService
将消息数据分发给订阅的服务和参与者。 - 您还可以运行一个容器化的排队平台like RabbitMQ with volumes。
通过运行在集群内设置队列系统,您将不会引入外部依赖。
问题不在于 SF,您设计的主要问题是您将架构要求与实现相结合。 SF 在 VirtualMachines 之上运行,最后,唯一的区别是 SF 将服务放在这些机器中,使用另一种解决方案,您将有一个代理在其中部署这些服务或进行手动部署。挑战是一样的。
从描述中可以看出,你的设计需求是需要一个消息队列,无论是Service Bus、RabbitMQ还是MSMQ,队列的概念都是一样的。然后每个人都将具有队列的基本基础以及每个实现的细节,有些可能会添加事务,有些可能会实现多种模式,等等。
如果您根据特定的实现进行设计,您会将您的解决方案与实现相结合,使您的解决方案难以维护并面临您描述的挑战。
NServiceBus 和 Masstransit 等解决方案减少了代码中的大量耦合,如果您认为这些还不够,可以创建自己的抽象。然后使用配置将业务逻辑与实现联系起来。
Despite the above advice, I would not recommend you using different solutions per environment, because as said previously, each solution has it's own implementations and they might not assimilate to each other, as example, you might face issues in production because you developed against MSMQ on DEV and TEST environments, and when deployed to Production you use ServiceBus, they have different limitations, like message size, retention period and son on.
如果您愿意使用 MSMQ,您可以将 MSMQ 添加到 VM 运行 您的集群中,并从您的服务进行连接而不会出现任何问题。首先看一下这个 SO: