Зеркало вызовов gRPC

#c# #grpc

#c# #grpc

Вопрос:

Я хочу иметь возможность отображать все вызовы gRPC для некоторых служб в другой набор служб с тем же интерфейсом на C #. Я думаю о написании метода расширения для GrpcClientFactory.createClient, чтобы вернуть класс, который выполнял бы два вызова параллельно. Результат от зеркала не нужен, поэтому я бы вернул результат с первого вызова. Является ли это наилучшим подходом к задаче или можно сделать это лучше?

Ответ №1:

В значительной степени то, что вы описали, в вашем случае вы можете использовать IHttpClientFactory для создания http-клиентов

     public class GrpResponse
    {
        public string client { get; set; }
        public HttpResponseMessage response { get; set; }
    }

    private async void ExecuteGrpRequest()
    {
       var payLoad = new HttpRequestMessage();
        var grpTasks = new List<Task<GrpResponse>>
        {
            SendAsyc("real", payLoad),
            SendAsyc("mock", payLoad)
        };

        var responses = await Task.WhenAll(grpTasks);
    }

    private async Task<GrpResponse> SendAsyc(string client, HttpRequestMessage message )
    {
        // IHttpClientFactory is _httpClientFacotry; injected from ctor
        var httpClient = _httpClientFacotry.CreateClient(client);
        return  new GrpResponse
            {
                client = client,
                response = await httpClient.SendAsync(new HttpRequestMessage())
            };
    }