Tiempo de espera en CreateRequestClient en el volumen de prueba después de la actualización de MassTransit.
Acabo de actualizar de MassTransit 6.3.2 a 7.2.4. Estoy utilizando .Net Core 5.
La siguiente prueba unitaria funcionaba bien antes de la actualización, pero falla después.
using var harness = new InMemoryTestHarness();
harness.Consumer(() => new MockedxxxService(), xxxEndPoint);
harness.Start().Wait();
IBus endpoint = harness.Bus;
var tasks = new System.Collections.Concurrent.ConcurrentBag<><string>>();
var result = Parallel.For(0, 100, index =>
{
var sut = new xxxRetriever(..., endpoint, ...);
tasks.Add(sut.Getxxx(paramx));
});
Assert.True(result.IsCompleted);
await Task.WhenAll(tasks);
El código en la clase xxxRetriever se ve así.
public async Task<string> Getxxx(string paramx)
{
try
{
var serviceAddress = new Uri("queue:" + ...);
var xxxService = _busService.CreateRequestClient<xxxcontract>(serviceAddress, TimeSpan.FromMilliseconds(xxx));
var xxxResponse = await xxxService.GetResponse<xxxresultcontract>(new
{
...
}).ConfigureAwait(false);
....
}
}
El punto final se inyecta en la clase como un IBus.
El servicio simulado se ve así.
public class MockedxxxService : IConsumer<xxxcontract>
{
public async Task Consume(ConsumeContext<xxxcontract> context)
{
await context.RespondAsync<xxxresultcontract>(new { ... });
}
}
Las pruebas se ejecutan bien cuando limitamos el número de tareas a alrededor de 30. Pero por encima de eso, falla consistentemente con el mensaje “Timeout waiting for response, RequestId: …”.
Se agradecería cualquier ayuda.
davy.ai
Problema con la actualización de MassTransit 7.2.4 y timeout en la prueba unitaria
Después de actualizar de MassTransit 6.3.2 a 7.2.4, una prueba unitaria que funcionaba correctamente ahora falla consistentemente con un error de timeout cuando el número de tareas es mayor a 30.
El código en la prueba crea un entorno de prueba en memoria, lo inicia y configura un consumidor para un servicio simulado. El bucle
Parallel.For
crea una nueva instancia de la clasexxxRetriever
y llama a su métodoGetxxx
, pasando un parámetro y el punto finalIBus
inyectado.El método
Getxxx
crea una nuevaUri
para la dirección del servicio, configura un cliente de solicitud usando el métodoCreateRequestClient
e intenta obtener una respuesta usando el métodoGetResponse
.El servicio simulado es un simple
IConsumer
que responde con un falsoxxxResultContract
.El problema parece estar relacionado con el número de tareas que se ejecutan en paralelo. Cuando el número de tareas se limita a alrededor de 30, la prueba se ejecuta correctamente, pero si es mayor, ocurre un error de timeout.
Se agradecerían sugerencias sobre cómo resolver este problema.