0
我正在模拟Azure数据中心的故障以及服务总线在成对命名空间情况下处理插入的方式。当主名称空间无法访问时Azure服务总线:配对名称空间插入
的ms docs指出:
失败时发送到主队列中,发送者开始发送 消息到一个随机选择的缓冲区队列
然而,我注意到队列客户端/消息发送者总是试图命中主命名空间,并且从不切换到次命名空间。
private MessagingFactory GetFactory(bool isReceiver = false)
{
var primaryConnectionString = PrimaryConnectionString();
var secondaryConnectionString = SecondaryConnectionString();
var primaryFactory =
MessagingFactory.CreateFromConnectionString(primaryConnectionString);
var secondaryMessagingFactory = MessagingFactory.CreateFromConnectionString(secondaryConnectionString);
var secondaryNamespaceManager = NamespaceManager.CreateFromConnectionString(secondaryConnectionString);
var sendAvailabilityOptions = new SendAvailabilityPairedNamespaceOptions(secondaryNamespaceManager,
secondaryMessagingFactory, 1, TimeSpan.FromSeconds(5), isReceiver);
primaryFactory.PairNamespaceAsync(sendAvailabilityOptions).Wait();
return primaryFactory;
}
和发送测试消息:
var factory = GetFactory();
var messageSender = factory.CreateMessageSender(_queueName);
var msg = new BrokeredMessage(partition)
{
PartitionKey = partition,
SessionId = partition
};
messageSender.Send(msg);
我测试它是一个虚拟的IP在hosts文件的主要命名空间URL关联的方式。发送失败时会有一个超时异常(即每个后续请求的情况)。
我猜测ping任务没有选择切换,因为我的发件人永远不会尝试联系辅助命名空间。问题在哪里?
值得一提的是,辅助名称空间中的备份队列已正确创建。