在处理 Amazon SQS 异常时,出现“AmazonSQSException: 参数Condition的值必须来自全局上下文密钥列表”错误通常表示您正在尝试使用无效的条件参数。为了解决这个问题,您可以按照以下步骤进行处理:
检查您的 Amazon SQS API 调用代码,确认您是否在请求中包含了一个名为 Condition
的参数。
确保 Condition
参数的值来自于全局上下文密钥列表 (GlobalContextKeys)。全局上下文密钥列表包括以下几个常见的密钥:
aws:CurrentTime
:当前时间戳。aws:EpochTime
:当前时间的 Unix 时间戳。aws:TokenIssueTime
:安全凭证的发行时间。aws:SignatureVersion
:请求签名版本。如果您的代码中使用了自定义的条件参数,确保使用了有效的全局上下文密钥列表中的密钥。
下面是一个使用有效的全局上下文密钥列表的 Java 代码示例:
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
public class SQSExample {
public static void main(String[] args) {
String queueUrl = "your_queue_url";
String conditionKey = "aws:TokenIssueTime";
String conditionValue = "2019-01-01T00:00:00Z";
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_WEST_2)
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
SendMessageRequest sendMessageRequest = SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody("Hello")
.messageAttributes(
MessageSystemAttributeName.builder()
.attributeName("Condition")
.attributeValue(conditionKey + "=" + conditionValue)
.build()
)
.build();
SendMessageResponse sendMessageResponse = sqsClient.sendMessage(sendMessageRequest);
System.out.println(sendMessageResponse.messageId());
}
}
在上面的示例中,我们使用了有效的全局上下文密钥 aws:TokenIssueTime
作为条件参数,并将其添加到了 Condition
属性中。您可以根据自己的需求修改条件参数和值。
请注意,具体解决方法可能会因您使用的编程语言和 Amazon SQS 客户端库而有所不同。上述示例适用于使用 AWS SDK for Java v2.x 的 Java 代码。如果您使用其他编程语言和库,请参考相应的文档和示例代码。