我希望能够从集群内的单个无状态服务公开多个 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)方法的异常导致我相信第一个监听器错误地响应了所有 Proxy 调用.
"Interface id '740213831' is not implemented by object 'TaxonomyService.SqlCategoryCommandService'"
我正在使用以下代码创建代理:
var proxy = ServiceProxy.
Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"));
我描述的场景是否可能?
最佳答案
另一个用户早些时候正确回答了这个问题,但是出于某种原因它被 mod 删除了,所以为了后代:
是这是可能的。您只需在创建服务代理时指定监听器名称:
var proxy = ServiceProxy.Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"), listenerName: "SqlCategoryQueryService");
关于microservices - 单个服务中的多个 FabricTransportServiceRemotingListeners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975554/