【问题标题】:Service fabric more than one communication listener for service remoting用于服务远程处理的服务结构多个通信侦听器
【发布时间】:2026-01-20 22:35:01
【问题描述】:

我正在使用 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 以便我可以将一些来自微服务的数据公开给其他人。方法是否有可能或有什么问题。我已经完成了基于反向代理的通信,但有点关心性能(因为我计划执行从服务 1 到服务 2 的实时读取操作)。

【问题讨论】:

    标签: azure microservices azure-service-fabric


    【解决方案1】:

    在您的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"))
        };
    }
    

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

    【讨论】: