1

在 Microsoft ServiceBus 文档中的代码示例中,以下代码用于确保主题存在。

// Create the topic if it does not exist already
string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");

var namespaceManager = 
NamespaceManager.CreateFromConnectionString(connectionString);

if (!namespaceManager.TopicExists("TestTopic"))
{
    namespaceManager.CreateTopic("TestTopic");
}

但是我想知道TopicExists如果我在发送消息之前输入此代码,调用将有多贵。(假设我不想单独有初始化代码)

另一种方法是保持乐观并在不检查主题存在和处理的情况下发送消息MessagingEntityNotFoundException。如果出现异常,我们可以创建主题并重试发送消息。

第二种方法对我来说似乎更好,但我找不到任何支持它的参考资料。所以我想知道,微软在他们的文档和示例中选择第一种方法而不是处理异常是否有特殊原因。

4

1 回答 1

0

要记住的一件事是,您需要管理总线权限才能创建主题。您可能不想向所有客户端授予此级别的权限,因为这可能会带来一些安全风险,例如,客户端可以创建订阅以读取它不应该看到的消息。

在打开客户端连接之前调用 TopicExists() 并不是很昂贵,并且会产生更优雅的代码。如果您在创建任何内容之前等待异常被触发,那么您可能会发现您手上有大量失败的消息。

我通常有一个单独的过程来创建和更新总线的结构。这有多实用取决于您创建了多少主题和队列。

于 2015-03-13T17:41:18.910 回答