【问题标题】:Service fabric communication by RPC with metadata通过 RPC 与元数据进行服务结构通信
【发布时间】:2017-07-12 16:35:27
【问题描述】:

API Gateway 应用程序中,我设置为请求traceId。然后通过HTTP 将其传递给我的无状态服务。但是服务应该通过RPC(使用IServiceRemotingListener)调用另一个服务。如何将该 traceId 传递给其他服务?

到目前为止我已经完成了(根据this):

public interface ICommunicationService : IService
{
    Task<string> FooAsync();
}

public class Stateless1 : StatelessService, ICommunicationService 
{
    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
    {
        return new[] { new ServiceInstanceListener(c => this.CreateServiceRemotingListener(c)) };
    }       

    public Task<string> FooAsync()
    {
        return Task.FromResult("TraceId: " + TraceId);
    }
}

并尝试使用它:

ICommunicationService service = ServiceProxy.Create<ICommunicationService>(new Uri("fabric:/App/Stateless1"));

string message = await service.FooAsync();

如何将该 TraceId 传递给其他服务 b RPC?

【问题讨论】:

    标签: c# azure rpc microservices azure-service-fabric


    【解决方案1】:

    您只能在 SF 远程处理中使用方法。将属性更改为方法GetCorrelationId,该方法将其作为Taskint 返回。并添加一个方法:

    Task SetCorrelationId( int id){} 
    

    或者最好,在调用者上生成它并将它作为消息参数的一部分传递给'FooAsync',这样更好,因为它使服务保持无状态。

    【讨论】:

    • 谢谢。还有其他方法可以通过 IServiceRemotingClient 传递 CorrelationId 吗?
    • 是的,检查一下:stackoverflow.com/questions/34166193/… 使用 IServiceRemotingClientServiceRemotingDispatcher 的自定义实现。
    • 非常感谢您的链接和帮助
    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2020-05-12
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多