Использование нескольких строк подключения с Rebus & AzureServiceBus

Мы использовали Rebus для отправки команд в служебную шину Azure. У нас есть проект, который охватывает среды и должен посылать команды в два разных пространства имен ASB (разные строки подключения).

То, как мы в настоящее время регистрируем Rebus, не позволяет нам создавать фабрику или использовать несколько пространств имен (о которых я знаю).

Внутри метода Startup.cs ConfigureServices (...):

services.AddRebus(config =>
{
    var asbConfig = Configuration.GetSection("AzureServiceBusConfiguration").Get<AzureServiceBusConfiguration>();
    config
        .Logging(l => l.Serilog(Log.Logger))
        .Transport(t => t.UseAzureServiceBusAsOneWayClient(asbConfig.ConnectionString))
        .Routing(r => r.TypeBased().Map<MyCommand>($"{asbConfig.Environment}/myQueueName"));

    return config;
});

Я пытался атаковать это с нескольких разных направлений, и все потерпели неудачу. Существует ли поддерживаемый способ регистрации более одной конфигурации IBus с разными строками подключения?

Нам в основном нужно увеличивать это в зависимости от объема запроса, чтобы мы могли настроить Rebus на основе значения заголовка запроса. Не уверен, с чего начать.

1 ответ

Решение

Хотя Rebus имеет довольно хорошую поддержку для вставки себя в контейнер IoC с помощью концепции "контейнерного адаптера", не всегда имеет смысл всегда делать это автоматически.

В этом случае я предлагаю вам обернуть односторонних клиентов выделенным классом, например что-то вроде CommandSender или что-то еще, а затем отправитель команды может инициализировать своего одностороннего клиента в конструкторе (и снова разместить его в своем Dispose метод).

Односторонние клиенты довольно недороги в создании, поэтому может быть достаточно просто создавать / распоряжаться ими каждый раз, когда они вам нужны. Если вы нуждаетесь в них часто, я предлагаю вам использовать ConcurrentDictionary чтобы сохранить инициализированные экземпляры - просто не забудьте утилизировать их все, когда ваше приложение закрывается.

Другие вопросы по тегам