Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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
C# 如果AWS SNS主题不存在,请不要创建该主题_C#_Amazon Web Services_Aws Sdk_Amazon Sns - Fatal编程技术网

C# 如果AWS SNS主题不存在,请不要创建该主题

C# 如果AWS SNS主题不存在,请不要创建该主题,c#,amazon-web-services,aws-sdk,amazon-sns,C#,Amazon Web Services,Aws Sdk,Amazon Sns,我正在为AWS SNS服务使用AWSSDK.SimpleNotificationService(C#)。我们有一个自定义的发布方法,用于将消息发布到SNS。发布消息当前类似于以下代码段: public void Publish(string topicName, string message) { //private readonly IAmazonSimpleNotificationService _snsClient; (just showing how _snsClient is

我正在为AWS SNS服务使用AWSSDK.SimpleNotificationService(C#)。我们有一个自定义的发布方法,用于将消息发布到SNS。发布消息当前类似于以下代码段:

public void Publish(string topicName, string message)
{
    //private readonly IAmazonSimpleNotificationService _snsClient; (just showing how _snsClient is created)
    var result = await _snsClient.CreateTopicAsync(_topicName).ConfigureAwait(false);
    snsClient.Publish(message);

}
如果主题不存在,则会创建一个新主题

我知道CreateTopicAsync是幂等的,如果主题不存在,它将创建主题并返回带有ARN的响应

我的用例: 我希望主题不创建,如果它还不存在。有什么建议吗

我探索了什么?

  • GetTopicAttributesAsync->此函数返回主题的属性(如果存在),否则返回404异常。这可能是检查主题是否已经存在的好方法,但问题是它接受主题ARN,而CreateTopicAsync接受主题名称。我的问题是,我不可能有这个主题,因为我不知道这个主题是否存在(事实上,这就是我想要做的)
我的意图是执行如下操作,只是GetTopicAttributesAsync方法将不接受topicName。因此,我被阻止了:

public void Publish(string topicName, string message)
{
    //private readonly IAmazonSimpleNotificationService _snsClient; (just showing how _snsClient is created)
    var topicAttributes = await _snsClient.GetTopicAttributesAsync(topicName).ConfigureAwait(false);
    if (topicAttributes.HttpStatusCode == System.Net.HttpStatusCode.NotFound)
            {
                throw new ApplicationException($"SNS topic '{topicName}' does not exist. Not creating a new one.");

            }
    snsclient.Publish(message);
    return;
}
问题

  • 除了GetTopicAttributesAsync检查主题是否存在之外,还有其他方法吗
  • 是否有一种方法可以使用CreateTopicAsync,但如果主题不存在,则不创建该主题

  • 如果你知道
    主题名
    ,你可以自己构建它的arn。@Marcin-这是个好主意。但我们有多个环境,通常的ARN名称有env名称前缀,还有区域名称。很难建造一个。还有别的办法吗?目前还不知道。SDK可以为您提供当前区域,并且topicName已传递到
    Publish
    。我不太明白arn的
    env
    前缀是什么?那是什么?如果你知道主题名,你可以自己构建它的arn。@Marcin-这是个好主意。但我们有多个环境,通常的ARN名称有env名称前缀,还有区域名称。很难建造一个。还有别的办法吗?目前还不知道。SDK可以为您提供当前区域,并且topicName已传递到
    Publish
    。我不太明白arn的
    env
    前缀是什么?那是什么?