我正在使用适用于Amazon SNS的Amazon AWS
Ruby SDK,但我在使用已经注册的设备时遇到了一些问题.有时当设备再次注册时,我收到类似AWS :: SNS :: Errors :: InvalidParameter的错误无效参数:令牌原因:端点arn:aws:sns:us-east-1:****已经存在且具有相同的令牌,但不同的属性..如何检查端点是否已存在,更重要的是,如何获取给定令牌的端点?
解决方法
感谢BvdBijl的想法,我做了一个扩展方法,删除现有的一个,如果找到,然后添加它.
using System; using System.Text.RegularExpressions; using Amazon.SimpleNotificationService; using Amazon.SimpleNotificationService.Model; namespace Amazon.SimpleNotificationService { public static class AmazonSimpleNotificationServiceClientExtensions { private const string existingEndpointRegexString = "Reason: Endpoint (.+) already exists with the same Token"; private static Regex existingEndpointRegex = new Regex(existingEndpointRegexString); public static CreatePlatformEndpointResponse CreatePlatformEndpointIdempotent( this AmazonSimpleNotificationServiceClient client,CreatePlatformEndpointRequest request) { try { var result = client.CreatePlatformEndpoint(request); return result; } catch (AmazonSimpleNotificationServiceException e) { if (e.ErrorCode == "InvalidParameter") { var match = existingEndpointRegex.Match(e.Message); if (match.Success) { string arn = match.Groups[1].Value; client.DeleteEndpoint(new DeleteEndpointRequest { EndpointArn = arn,}); return client.CreatePlatformEndpoint(request); } } throw; } } } }