Aws集成弹簧:扩展可见性超时

时间:2016-07-13 15:11:28

标签: spring spring-integration aws-sdk spring-cloud

是否可以将可见时间延长到正在传输的消息中。

请参阅:

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

部分:更改消息的可见性超时。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQSClient.html#changeMessageVisibility-com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest-

总之,我希望能够为正在传输的给定消息扩展第一个集可见性超时。

示例如果15secs已经通过我然后想要将超时延长20秒。上面的java文档中更好的例子。

根据我对上述链接的理解,你可以在亚马逊方面做到这一点。

以下是我目前的设置;

  SqsMessageDrivenChannelAdapter adapter =
  new SqsMessageDrivenChannelAdapter(queue);
  adapter.setMessageDeletionPolicy(SqsMessageDeletionPolicy.ON_SUCCESS);
  adapter.setMaxNumberOfMessages(1);
  adapter.setSendTimeout(2000);
  adapter.setVisibilityTimeout(200);
  adapter.setWaitTimeOut(20);

是否可以延长此超时?

1 个答案:

答案 0 :(得分:1)

行。看起来我明白了你的意思。

我们可以使用API​​更改特定邮件的可见性:

AmazonSQS.changeMessageVisibility(String queueUrl, String receiptHandle, Integer visibilityTimeout)

为此目的,在下游流程中,您必须访问(注入)AmazonSQS bean并从Message中提取特殊标题:

@Autowired
AmazonSQS amazonSqs;

@Autowired
ResourceIdResolver resourceIdResolver;
...


MessageHeaders headers = message.getHeaders();

DestinationResolver destinationResolver = new DynamicQueueUrlDestinationResolver(this.amazonSqs, this.resourceIdResolver);

String queueUrl = destinationResolver.resolveDestination(headers.get(AwsHeaders.QUEUE));

String receiptHandle = headers.get(AwsHeaders.RECEIPT_HANDLE);

amazonSqs.changeMessageVisibility(queueUrl, receiptHandle, YOUR_DESIRED_VISIBILITY_TIMEOUT);

但是呃,我同意我们应该就此问题提供一些开箱即用的功能。这可能与QueueMessageAcknowledgment类似,与新标题类似。或者甚至只有一个changeMessageVisibility方法。

请为Spring Cloud AWS项目提出有关此SO主题链接的GH问题。