MassTransit - Evitar que un mensaje ir al RMQ se saltó la cola, cuando se utiliza un filtro

plátanos maduros :

Estoy usando MassTransit con RabbitMQ. Tras la exmaple en la página oficial de la documentación para el middleware de costumbre, estoy tratando de crear un filtro en la tubería de consumo mensaje que filtrará de salida algunos mensajes en función de una determinada condición. Mi filtro es el siguiente:

public class MyCustomFilter<T> : IFilter<T>
    where T : class, ConsumeContext
{
    public void Probe(ProbeContext context) { }

    public async Task Send(T context, IPipe<T> next)
    {
        if (/* certain condition */)
        {
            await next.Send(context);
        }
    }
}

El problema es que cuando el mensaje no se pasa por la tubería (es decir, await next.Send(context)no se llama), los extremos mensaje en la cola RabbitMQ consumidor _skipped. ¿Hay una manera de evitar que el mensaje va en esa cola?

Alexey Zimarev:

El skipped(la letra muerta) cola recibe el mensaje por la DeadLetterFilterinvocación. Aquí está el código:

async Task IFilter<ReceiveContext>.Send(ReceiveContext context, IPipe<ReceiveContext> next)
{
    await next.Send(context).ConfigureAwait(false);

    if (context.IsDelivered || context.IsFaulted)
        return;

    context.LogSkipped();

    await _deadLetterPipe.Send(context).ConfigureAwait(false);
}

Por lo tanto, se puede imaginar que si el contexto tiene IsDeliveredo IsFaultedconjunto a true, los mensajes no va a terminar en la cola de mensajes no entregados.

Si se lanza en el filtro, los mensajes terminan en el veneno ( errorcola) en su lugar, así que supongo que no es una opción.

Se puede simular que sus mensajes sean entregados por hacer algo como esto para los mensajes filtrados en el filtro:

public Task Send(T context, IPipe<T> next)
    => condition
        ? next.Send(context)
        : context.NotifyConsumed(context as ConsumeContext<MyMessage>, TimeSpan.Zero, "Filtered");

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=294408&siteId=1
Recomendado
Clasificación