Добавить динамические адреса в шлюз 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 необходимо выполнить некоторую инициализацию с удаленным сайтом до запуска конечной точки.