es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtro ConsumeContext en MassTransit

En este post encontré cómo enviar mis propiedades de enriquecimiento de Serilog a los consumidores. Cuando registro mis informaciones, todo está correcto. Pero cuando se produce una excepción en los consumidores, no veo mis propiedades de Serilog en el archivo de registro, como puede ver:

ERR – – –

2022-01-03 12:25:40.346 - myApp - MassTransit.ReceiveTransport - ERR -  -  -  => R-FAULT "rabbitmq://localhost/MyConsumer" "c8100000-568d-0050-407a-08d9ce96c99c"

Bueno, supongo que el registro de excepciones ocurrió en otro contexto. Supongo que el registro de excepciones ocurrió en la clase ExceptionConsumeContext. Así que implementé un filtro para ExceptionConsumeContext:

public class IntegrationEventExceptionConsumeFilter<t> : IFilter<><t>> where T : class
{
    public IntegrationEventPublishFilter()
    {

    }

    public Task Send(ExceptionConsumeContext<t> context, IPipe<><t>> next)
    {
        return next.Send(context);
    }

    public void Probe(ProbeContext context)
    {
    }
}

Ahora necesito agregar este filtro a la configuración de MassTransit:

cfg.UseConsumeFilter(typeof(IntegrationEventExceptionConsumeFilter<>), context);

Bueno, obtuve la excepción:

The scoped filter must implement GreenPipes.IFilter<><myevent>> (Parameter 'scopedType')

Bueno, no pude encontrar ningún registro de filtro de consumidor para el tipo ExceptionConsumeContext. Y como vi que ExceptionConsumeContext hereda de ConsumeContext, supongo que puedo registrar este filtro como un ConsumeFilter, pero no funciona de esta manera.

public interface ExceptionConsumeContext : ConsumeContext, PipeContext, MessageContext, IPublishEndpoint, IPublishObserverConnector, ISendEndpointProvider, ISendObserverConnector{}

Ahora, ¡no sé qué hacer!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El usuario está teniendo un problema donde las propiedades de enriquecimiento de Serilog no se están registrando cuando se produce una excepción en un consumidor de MassTransit. Han implementado un filtro para ExceptionConsumeContext pero están teniendo problemas para registrarlo con MassTransit.

    El mensaje de error que reciben indica que el filtro de ámbito debe implementar GreenPipes.IFilter<><myevent>>. Sin embargo, no pudieron encontrar ningún registro de filtro de consumidor para el tipo de ExceptionConsumeContext.

    Dado que ExceptionConsumeContext hereda de ConsumeContext, el usuario puede intentar registrar el filtro como un ConsumeFilter. Si eso no funciona, es posible que deban buscar un enfoque diferente o buscar ayuda adicional con el problema.

Comments are closed.