C# 如果AWS SNS主题不存在,请不要创建该主题
我正在为AWS SNS服务使用AWSSDK.SimpleNotificationService(C#)。我们有一个自定义的发布方法,用于将消息发布到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
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接受主题名称。我的问题是,我不可能有这个主题,因为我不知道这个主题是否存在(事实上,这就是我想要做的)
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;
}
问题:
如果你知道
主题名
,你可以自己构建它的arn。@Marcin-这是个好主意。但我们有多个环境,通常的ARN名称有env名称前缀,还有区域名称。很难建造一个。还有别的办法吗?目前还不知道。SDK可以为您提供当前区域,并且topicName已传递到Publish
。我不太明白arn的env
前缀是什么?那是什么?如果你知道主题名,你可以自己构建它的arn。@Marcin-这是个好主意。但我们有多个环境,通常的ARN名称有env名称前缀,还有区域名称。很难建造一个。还有别的办法吗?目前还不知道。SDK可以为您提供当前区域,并且topicName已传递到Publish
。我不太明白arn的env
前缀是什么?那是什么?