【问题标题】:Azure service bus paired namespace - simulate failoverAzure 服务总线配对命名空间 - 模拟故障转移
【发布时间】:2015-08-28 12:08:43
【问题描述】:

我正在使用 Azure 服务总线配对命名空间,并且需要能够模拟到辅助命名空间的故障转移。我确实通过为主命名空间输入错误的连接字符串来实现这一点,并看到它故障转移并将消息发送到辅助命名空间。这似乎不再奏效了。我无法通过 azure 管理门户或其他任何地方找到使命名空间脱机的方法。有人知道如何做到这一点吗?

这是我的参考代码

var pairedNamespaceConfiguration = this.pairedNamespaceConfigurationDictionary[configurationKey];
MessagingFactory factory = MessagingFactory.CreateFromConnectionString(pairedNamespaceConfiguration.PrimaryNamespace.ConnectionString);
MessagingFactory secondaryMessagingFactory = MessagingFactory.CreateFromConnectionString(pairedNamespaceConfiguration.SecondaryNamespace.ConnectionString);
NamespaceManager secondaryNamespaceManager = NamespaceManager.CreateFromConnectionString(pairedNamespaceConfiguration.SecondaryNamespace.ConnectionString);

SendAvailabilityPairedNamespaceOptions sendAvailabilityOptions = new SendAvailabilityPairedNamespaceOptions(secondaryNamespaceManager, secondaryMessagingFactory, pairedNamespaceConfiguration.BacklogQueueCount, TimeSpan.FromSeconds(pairedNamespaceConfiguration.FailoverIntervalSeconds), false);
factory.PairNamespaceAsync(sendAvailabilityOptions).Wait();
MessageSender messageSender = factory.CreateMessageSender(pairedNamespaceConfiguration.PathName);
string messageContent = JsonConvert.SerializeObject(message);

using(BrokeredMessage brokeredMessage = new BrokeredMessage(messageContent))
{
    messageSender.Send(brokeredMessage);
}

【问题讨论】:

    标签: c# azure namespaces


    【解决方案1】:

    修改您的 \Windows\system32\drivers\etc\hosts 文件以将 original 命名空间指向类似 127.0.0.1 的名称。这会使原来的命名空间连接失败。

    【讨论】:

    • 使用 Fiddler 阻塞到原始空间的流量怎么样?我发现调整主机文件更持久。
    • 我在创建工厂后将主命名空间重定向到 127.0.0.1,但我仍然看到对原始 IP 的请求。是否有可能在工厂中以某种方式缓存了主命名空间 IP?谢谢
    • 您可能必须在两次测试之间在命令提示符下执行“ipconfig /flushdns”。
    【解决方案2】:

    我正在使用这个例子Geo-replication with Service Bus Relayed Messages 来实现同样的想法。也许它对你也有用。

    所有服务总线实体都驻留在一个命名空间中。命名空间附属于数据中心。为了允许数据中心之间的故障转移,用户必须为每个数据中心创建一个服务总线和 ACS 命名空间(如果使用 ACS)。任何需要在出现数据中心故障时保持可访问性的服务总线中继都必须在两个命名空间中创建。

    服务器打开两个 NetTcp 中继端点,两个命名空间各有一个。服务器处理通过这些端点之一接收到的任何请求。请注意,两个继电器必须具有不同的名称(例如,主继电器的地址是 sb://myPrimaryNamespace.servicebus.windows.net/myService-primary 和 b://mySecondaryNamespace.servicebus.windows.net/myService-secondary )。

    客户端将两个复制中继中的一个视为活动中继,将另一个视为备份。它打开一个到活动中继的通道并调用服务上的方法。如果调用失败并出现任何不属于服务合同的异常,则客户端放弃通道,打开到备用中继的通道,并再次调用服务方法。客户端会将新通道视为活动通道并继续使用该通道,直到发生下一个故障。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-13
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多