Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是处理MessaginEntityNotFoundException更好,还是应该在发送消息之前检查主题是否存在_Exception_Azure_Azureservicebus_Optimistic - Fatal编程技术网

是处理MessaginEntityNotFoundException更好,还是应该在发送消息之前检查主题是否存在

是处理MessaginEntityNotFoundException更好,还是应该在发送消息之前检查主题是否存在,exception,azure,azureservicebus,optimistic,Exception,Azure,Azureservicebus,Optimistic,在Microsoft ServiceBus文档中的代码示例中,以下代码用于确保主题存在 // Create the topic if it does not exist already string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); var namespaceManager = NamespaceManager.CreateFrom

在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的费用将有多高。(假设我不想单独使用初始化代码)

另一种方法是乐观地发送消息,而不检查主题是否存在并处理
MessaginEntityNotFoundException
。如果出现异常,我们可以创建主题并重试发送消息


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

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

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


我通常有一个单独的过程来创建和更新总线的结构。这是否实用取决于您正在创建的主题和队列的数量。

如果它预期它可能找不到:请检查它。如果它是意外的:处理它。@Peter我同意这个想法,但是在这里,第一次,在一个新的环境中,它预计不会被找到,但是在那之后,它是意外的主题不在那里。但是,嗯。。。。这确实是一个不同的情况!您是否有安装/设置或集成过程,将您的软件带入安装/集成/配置过程?或任何类似于安装/集成的启动过程?如果没有,您必须先检查它。如果是,请在集成/安装时进行检查,并在运行时进行处理。@Peter目前没有安装/安装机制,我的策略是在需要的时间和地点创建/验证内容,而不是预先设置所有内容。(或者假设所有的东西都在那里,当出现问题时处理异常)