在网关NserviceBus中添加动态地址

时间:2015-10-27 12:11:46

标签: nservicebus nservicebus-distributor

我正致力于向分布式系统发送消息。因此我更喜欢使用Gateway。问题是我正在动态获取Sitekeys,地址和channelType信息。 Nservicebus在app.config中检查sitekeys和相应的地址。但我的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 个答案:

答案 0 :(得分:1)

您可以在启动期间通过从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"
                }
            }
        };
    }
}

此示例基于文档网站中的以下示例:

答案 1 :(得分:0)

很遗憾,您无法在运行时更改app.config设置。我相信原因是nservicebus需要在端点启动之前对远程站点进行一些初始化。