我有一个场景,其中一个服务公开了从外部服务接收回调的WCF主机。
这些主机是动态创建的,可能有数百个。我需要确保它们在节点开始接收请求之前已经在节点上启动并运行,因此它们不会收到故障,这很关键。
有没有办法确保服务在我说准备好之前没有收到请求?在云服务中,我可以通过在OnStart方法中包含所有这些代码来实现此目的。
我最初的想法是,我可以在打开通信监听器之前引导它 - 希望结构管理器只在完成此操作后发送请求,但我找不到有关此生命周期的任何信息处理完毕。
答案 0 :(得分:1)
没有“结构管理器”可以控制您的服务在群集中之间的网络流量。如果您的服务已启动,则群集中的客户端或其他服务可以选择在知道其地址时尝试连接到该服务。考虑到这一点,你可以控制两件事:
首先,您的服务端点是否可被其他服务或客户端发现。这是您的服务端点向Service Fabric的命名服务注册的位置,这在您的ICommunicationListener.OpenAsync方法返回时发生。此时,服务端点已注册,其他人可以发现它并尝试连接到它。当然,如果你不想,你不必使用命名服务或ICommunicationListener模式;您的服务可以随时打开端点,但如果您不在命名服务中注册它,则必须提供自己的服务发现机制。
第二个问题是,运行服务的节点是否从Azure负载均衡器(或任何负载均衡器,如果您未在Azure中托管)接收流量。这与Service Fabric关系不大,而与负载均衡器本身有关。在Azure中,您可以使用load balancer probe来确定是否应将流量发送到节点。
编辑: 我在文档中添加了一些有关Azure负载均衡器的信息,希望这会有所帮助:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/