首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有配置覆盖的服务结构多个服务实例

具有配置覆盖的服务结构多个服务实例
EN

Stack Overflow用户
提问于 2015-12-09 02:17:52
回答 4查看 4.7K关注 0票数 20

我们的服务fabric应用程序包括一个通过OwinCommunicationListener公开HTTP端点的无状态服务。

此服务的ServiceManifest.Xml指定服务端点<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />

然后,可以通过http://localhost:8090/上的浏览器访问无状态服务

我们尝试做的是通过ApplicationManifest在同一service Fabric应用程序的不同端点上实例化此服务的多个实例。

ServiceManifestImport导入我们的服务包,并允许在应用程序级别覆盖配置。我们不能以这种方式覆盖ServiceEndpoint,只能覆盖Settings.xml中的值

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="FooServicePkg" ServiceManifestVersion="1.0.0" >
    <ConfigOverrides Name="Config">
      <Settings>
        <SectionName Name="MySettings">
        <Parameter Name="MySetting" Value="SomeValue">
      </Settings>
    </ConfigOverrides>
</ServiceManifestImport>

我们可以通过在DefaultServices下指定多个Service节点来创建服务的命名实例

<DefaultServices>
  <Service Name="FooInstanceA">
    <StatelessService ServiceTypeName="FooType" InstanceCount="1" />
      <SingletonPartition />
    </StatelessService>
  </Service>
  <Service Name="FooInstanceB">
    <StatelessService ServiceTypeName="FooType" InstanceCount="1" />
      <SingletonPartition />
    </StatelessService>
  </Service>
</DefaultServices>

是否可以通过configuration指定每个服务实例的配置覆盖?

我试图让服务实例监听特定的端口,方法是使用它们的服务名称来确定是哪个端口,因此FooInstanceA监听端口8090,FooInstanceB监听8091。

显然,服务Fabric在部署过程中发挥了一些魔力,因为当FooInstanceB侦听ServiceEndpoint配置中指定的端口之外的其他端口时,服务是不可访问的。

第一个原因是没有在端点上设置DACL,这可以通过运行以下命令来解决;

netsh http add urlacl http://+:8091/ user=everyone listen=yes

这允许服务在Service Fabric Explorer中显示健康状态,但是当我们使用http://localhost:8091/访问时,FooInstanceB会响应HTTP503错误

如何让服务实例监听不同的端口?

我希望你说得很清楚,谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-30 04:43:23

要做到这一点,没有太多很好的选择。以下是一些想法:

  1. 在一个应用内创建多个应用实例,而不是多个相同类型的服务。这将允许您使用app参数在您的服务类型中配置特定service.
  2. Create多个配置包的行为。每个配置包将用于其中一个服务实例。确定服务实例被分配到哪个配置包需要是动态的,可能是基于服务实例的名称?当然,这不是一个很好的选择,因为它将服务定义与将要创建的实例数量耦合在一起。
  3. 自定义配置实现。也许让您的服务公开一个端点,允许您在部署后对其进行配置。或者让服务调用在激活时提供其配置的其他管理服务。
票数 7
EN

Stack Overflow用户

发布于 2017-05-08 15:26:35

您还可以让Service Fabric自动分配端口,然后使用Service Fabric附带的反向代理。

票数 2
EN

Stack Overflow用户

发布于 2017-05-26 06:29:21

我认为在SF集群前面有一个url重写服务是一个非常好的主意。

这可以提供多个端点,并执行url重写、防火墙/黑名单、https等。

另一种方法是将服务打包为lib或Nuget,并使用不同的服务清单创建所需的N个服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34163124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档