Очередь skipped
(недоставленное письмо) получает сообщение с помощью вызова DeadLetterFilter
. Вот код:
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);
}
Итак, вы можете себе представить, что если для контекста IsDelivered
или IsFaulted
установлено значение true
, ваши сообщения не попадут в очередь недоставленных сообщений .
Если вы добавите фильтр, ваши сообщения окажутся в очереди «ядовитых» (error
), поэтому, я думаю, это не вариант.
Вы можете смоделировать доставку сообщений. сделав что-то подобное для отфильтрованных сообщений в вашем фильтре:
public Task Send(T context, IPipe<T> next)
=> condition
? next.Send(context)
: context.NotifyConsumed(context as ConsumeContext<MyMessage>, TimeSpan.Zero, "Filtered");