如何设置可靠的服务以在 Azure 远程集群上工作

How to set up reliable services to work on Azure remote cluster

我制作了一个可靠的服务应用程序,可以在本地集群上完美运行。

它有 1 个无状态服务和 1 个参与者服务,并且都使用服务远程处理。 没有在这些服务上定义端点(只有端点名称)并且两个服务都使用默认侦听器(没有 CreateServicesListeners 覆盖) 客户端应用程序是一个控制台应用程序,它使用远程服务与应用程序(ActorProxy 和 ServiceProxy)进行通信。

现在我想将它部署到 Azure 集群上。

我应该怎么做才能使客户端与集群上的应用程序正确通信?

我知道我必须:

但是我应该这样做吗?在那种情况下如何?

我的主要问题是如何创建ActorProxy和ServiceProxy

您不应在集群外使用 ActorProxy 和 ServiceProxy 类。而是使用面向 public 的服务,例如使用 https 作为服务网关的 Web Api。然后在Azure Load Balancer上打开https端口。

请阅读 the docs,因为它们列出了您需要执行的每个步骤。

这是一个使用 https 的服务示例(取自文档):

class HttpCommunicationListener : ICommunicationListener
{
    ...

    public Task<string> OpenAsync(CancellationToken cancellationToken)
    {
        EndpointResourceDescription endpoint =
            serviceContext.CodePackageActivationContext.GetEndpoint("WebEndpoint");

        string uriPrefix = $"{endpoint.Protocol}://+:{endpoint.Port}/myapp/";

        this.httpListener = new HttpListener();
        this.httpListener.Prefixes.Add(uriPrefix);
        this.httpListener.Start();

        string publishUri = uriPrefix.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);
        return Task.FromResult(publishUri);
    }

    ...
}

class WebService : StatelessService
{
    ...

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new[] { new ServiceInstanceListener(context => new HttpCommunicationListener(context))};
    }

    ...
}

像上面那样的 public 服务应该使用 ActorProxy 和 ServiceProxy 类 将工作委托给底层服务和参与者。

总结一下:

But should I so some of these things? And in that case how?

  • Override CreateServiceListeners Yes

  • Use FabricClient on client No

  • Use ServicePartitionClient on client No

My main problem is how to create ActorProxy and ServiceProxy This only applies for communication between services in the cluster