单个服务中的多个FabricTransportServiceRemotingListeners

时间:2016-08-16 12:54:40

标签: microservices azure-service-fabric

我希望能够从群集中的单个无状态服务中公开多个FabricTransportServiceRemotingListeners。我试图按如下方式注册听众:

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new[]
        {
            new ServiceInstanceListener(
                serviceContext =>
                    new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryCommandService(), new FabricTransportListenerSettings()
                    {
                        EndpointResourceName = "CategoryCommandEndpoint"
                    }), "SqlCategoryCommandService"),

            new ServiceInstanceListener(
                serviceContext =>
                    new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryQueryService(), new FabricTransportListenerSettings()
                    {
                        EndpointResourceName = "CategoryQueryEndpoint"
                    }), "SqlCategoryQueryService")
        };
    }

但是,当我对第二个侦听器实现的ICategoryQueryService进行代理时,抛出了关于未实现的接口方法的异常,这使我认为第一个侦听器错误地响应了所有代理调用。

"Interface id '740213831' is not implemented by object 'TaxonomyService.SqlCategoryCommandService'"

我使用以下代码创建代理:

var proxy = ServiceProxy.
     Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"));

我所描述的情景是否可能?

1 个答案:

答案 0 :(得分:4)

其他用户之前已经正确回答了这个问题,但无论出于何种原因,它都被mod删除了,所以对后人来说:

这是可能的。您只需在创建服务代理时指定侦听器名称:

var proxy = ServiceProxy.Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"), listenerName: "SqlCategoryQueryService");