Создается очередь «ошибки», даже если указана пользовательская очередь под названием «яд», как показано ниже.
Ведение журнала ниже:
[INF] Rebus.AzureServiceBus.AzureServiceBusTransport (Тема # 1):
Инициализация транспорта Zure Service Bus с очередью «subscriber1»
[INF] Rebus.Threading.TaskParallelLibrary.TplAsyncTask (Тема № 1):
Запуск по йодной задаче «CleanupTrackedErrors» с интервалом 00:00:10
[INF] Rebus.Bus.RebusBus (Тема № 1): установка количества рабочих на 5
[DBG] Rebus.Bus.RebusBus (Тема # 1): Добавление работника «Ребус 1, работник 1»
[DBG] Rebus.Bus.RebusBus (Тема # 1): Добавление работника "Ребус 1, работник 2"
[DBG] Rebus.Bus.RebusBus (Тема # 1): Добавление работника «Ребус 1, работник 3»
[DBG] Rebus.Bus.RebusBus (Тема # 1): Добавление работника "Ребус 1, работник 4"
[DBG] Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 1 рабочий
2): Запуск работающего (на основе пула потоков) «Rebus 1 работник 2» [DBG]
Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 1 рабочий 1):
Стартовый (на основе пула потоков) работник "Ребус 1 работник 1" [DBG]
Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 1 рабочий 3):
Стартовый (на основе пула потоков) работник "Ребус 1 работник 3" [DBG]
Rebus.Bus.RebusBus (Тема # 1): Добавление работника "Rebus 1 работник 5" [DBG]
Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 1 рабочий 4):
Начинающий (на основе пула потоков) работник "Ребус 1 работник 4" [INF]
Rebus.Bus.RebusBus (Thread # 1): шина "Rebus 1" запущена [DBG]
Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 1 рабочий 5):
Начинающий (на основе пула потоков) работник "Ребус 1 работник 5" [INF]
Rebus.AzureServiceBus.AzureServiceBusTransport (Тема # 1):
Инициализация транспорта службы шины Azure с очередью «яд» [INF]
Rebus.Threading.TaskParallelLibrary.TplAsyncTask (Thread # 1): запуск
периодическое задание «CleanupTrackedErrors» с интервалом 00:00:10 [INF]
Rebus.AzureServiceBus.AzureServiceBusTransport (Тема № 5): Создание
Очередь ASB "ошибка" [INF] Rebus.Bus.RebusBus (Thread # 1): номер настройки
работников до 1 [DBG] Rebus.Bus.RebusBus (Тема # 1): Добавление работника
«Rebus 2 рабочий 1» [INF] Rebus.Bus.RebusBus (Тема № 1): Автобус «Rebus 2»
запустил [DBG] Rebus.Workers.ThreadPoolBased.ThreadPoolWorker (Rebus 2
работник 1): стартовый (основанный на пуле потоков) работник "Ребус 2 работник 1"
Абонент 1 Нажмите ENTER, чтобы выйти
Подписчик ниже:
class Subscriber1
{
static void Main()
{
var activator = new BuiltinHandlerActivator();
activator.Register(() => new Handler());
Configure.With(activator)
.Logging(l => l.ColoredConsole(minLevel: LogLevel.Debug))
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Subscriber1))
.Options(o =>
{
o.SimpleRetryStrategy(maxDeliveryAttempts: 2,
errorQueueAddress: "poison");
o.Register<ITopicNameConvention>(c => new SimpleTopicNameConvention());
o.Decorate<IErrorHandler>(c => new MyErrorHandler(c.Get<IErrorHandler>()));
o.SetNumberOfWorkers(5);
o.SetMaxParallelism(10);
o.SetBackoffTimes(
TimeSpan.FromMilliseconds(100),
TimeSpan.FromMilliseconds(200),
TimeSpan.FromSeconds(1));
}).Start();
//if block 2 is commented, the issue doesn't happen
//block 2 start
var activator2 = new BuiltinHandlerActivator();
Configure.With(activator2)
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, "poison"))
.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();
//block 2 end
activator.Bus.Subscribe<string>().Wait();
Console.WriteLine("This is Subscriber 1");
Console.WriteLine("Press ENTER to quit");
Console.ReadLine();
Console.WriteLine("Quitting...");
activator.Dispose();
activator2.Dispose();
}
}
Если блок 2 выше отключен, проблема не возникает.
Есть идеи?