Поскольку Rebus использует обычные очереди в качестве очередей недоставленных букв, довольно просто запустить экземпляр шины с error
в качестве входной очереди - тогда вы можете, например, используйте встроенную в функцию пересылки транспортных сообщений от Rebus, чтобы сделать то, что вы хотите, для сообщений - например, переслать их в исходные очереди:
Configure.With(activator)
.Transport(t => (...)) //< use queue "error" here
.Routing(r =>
{
r.AddTransportMessageForwarder(async transportMessage =>
{
var sourceQueue = transportMessage.Headers.TryGetValue(Headers.SourceQueue, out var result)
? result
: throw new ArgumentException($"Could not find '{Headers.SourceQueue}' header");
return ForwardAction.ForwardTo(sourceQueue);
});
})
.Start();
или что вы там хотите.
Существует также пользовательский интерфейс Fleet Manager , который может это сделать - он полностью заменяет необходимость в очередях недоставленных писем, так как хранит сообщения о сбое в своей базе данных и позволяет возвращать сбойные сообщения. сообщения в их исходные очереди (или другую очередь, если вы этого хотите), но они доступны только, если вы являетесь Rebus Pro подписчиком.
Обновление (с ответами на вопросы в вашем обновлении):
1) AddTransportMessageForwarder имеет отношение только к конечной точке, которая получает сообщения.
2) Это «имя очереди», указанное в качестве аргумента метода .Useblablabla
. Например, для служебной шины Azure это будет выглядеть как
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, "error"))