服务结构多个通信监听器进行服务远程处理

时间:2017-06-07 06:19:34

标签: azure microservices azure-service-fabric

我正在使用Azure Service Fabric开发一些微服务。我有一些用例需要微服务之间的通信,我读到了有关服务远程处理的https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication-remoting。我只是想知道是否可以在SF应用程序中支持多个侦听器。例如。我有一个现有的无状态web api SF应用程序,它有一个像下面的监听器

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new ServiceInstanceListener[]
        {
            new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "ServiceEndpoint"))
        };
    }

在上面的列表中,我需要添加一个ServiceRemotingListener,以便我可以为其他人公开Micro服务中的一些数据。方法是否可能或有任何不妥之处。我已经完成了基于反向代理的通信,但有点关注性能(因为我计划从服务1到服务2执行实时读取操作)。

1 个答案:

答案 0 :(得分:3)

CreateServiceInstanceListeners方法中,您将返回一组侦听器。这意味着可以创建多个侦听器。只需像添加任何其他数组一样添加它:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new ServiceInstanceListener[]
    {
        new ServiceInstanceListener(serviceContext => this.CreateServiceRemotingListener(serviceContext), "RemotingListener"),
        new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "ServiceEndpoint"))
    };
}

请注意,即使侦听器名称是可选参数,您也必须为侦听器命名。我也遇到了服务代理试图连接到另一个端点的一些问题。为了解决此问题,首先声明远程监听器,然后再声明其他监听器。