Добавить динамические адреса в шлюз NserviceBus

Я работаю над отправкой сообщений в распределенные системы. Поэтому я предпочитаю использовать Gateway. Проблема в том, что я получаю Sitekeys, адреса и данные типа канала динамически. Nservicebus проверяет ключи сайта и соответствующий адрес в app.config. Но в моем app.config ничего нет. Я хотел динамически изменить app.config из кода. Это правильный подход? Или есть способ сделать это.

Ниже приведен код.

App.config

<GatewayConfig>
    <Sites>
      <Site Key="RemoteSite" Address="http://localhost:25899/RemoteSite/" ChannelType="Http" />
    </Sites>
    <Channels>
      <Channel Address="http://localhost:25899/Headquarters/" ChannelType="Http" />
    </Channels>
  </GatewayConfig>

Код

          string[] siteKeys =
            {
                "RemoteSite"
            };
            PriceUpdated priceUpdated = new PriceUpdated
            {
                ProductId = 2,
                NewPrice = 100.0,
                ValidFrom = DateTime.Today,
            };
            bus.SendToSites(siteKeys, priceUpdated);

2 ответа

Решение

Вы можете сделать это динамически во время запуска, создав GatewayConfig объект, наследуя от IProvideConfiguration<GatewayConfig> как показано в следующем примере.

Если есть новые записи, экземпляр шины необходимо перестроить.

public class GatewayConfigConfigurationProvider : IProvideConfiguration<GatewayConfig>
{

    public GatewayConfig GetConfiguration()
    {
        return new GatewayConfig
        {
            Channels =
            {
                new ChannelConfig
                {
                    Address = "http://localhost:25899/Headquarters/",
                    ChannelType = "Http"
                }
            },
            Sites =
            {
                new SiteConfig
                {
                    Address = "http://localhost:25899/RemoteSite/",
                    ChannelType = "Http",
                    Key = "RemoteSite"
                }
            }
        };
    }
}

Этот пример основан на следующем примере с сайта документации:

К сожалению, вы не можете изменить настройки app.config во время выполнения. Я полагаю, что причина в том, что nservicebus необходимо выполнить некоторую инициализацию с удаленным сайтом до запуска конечной точки.

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