我们用扩展功能包装了现有队列。消息可以放入队列中,我们看到消息正文存储在 S3 上。
但是,当消息被消费时,我们得到以下堆栈跟踪:
com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException: The input receipt handle is invalid. (Service: AmazonSQS; Status Code: 404; Error Code: ReceiptHandleIsInvalid; Request ID: ba9421e9-a9d2-56ba-8e17-70ff7190f05a)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2419)
at com.amazonaws.services.sqs.AmazonSQSClient.changeMessageVisibility(AmazonSQSClient.java:485)
at com.amazonaws.services.sqs.AmazonSQSClient.changeMessageVisibility(AmazonSQSClient.java:1692)
at com.amazon.sqs.javamessaging.AmazonSQSExtendedClientBase.changeMessageVisibility(AmazonSQSExtendedClientBase.java:1376)
当我们试图改变可见性时会发生这种情况。不支持吗?
sqsExtended.changeMessageVisibility(queueUrl, message.getReceiptHandle(), visibilityTimeout);
最佳答案
答案是这个没有实现,也没有尝试在调用方法时抛出异常来警告你。好像没有不实现的理由,看源码就直白了。
对于我们的案例,我们可以接受此参数的队列默认值而不是单独设置每个值。
关于amazon-s3 - SQS 扩展 - 输入收据句柄无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42147024/