2016-07-13 1 views
1

Возможно ли продлить время видимости сообщения, которое находится в полете.Aws интеграция весна: удлинить тайм-аут видимости

См:

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-

В заключении я хочу, чтобы иметь возможность продлить первый тайм-аут видимости набора для заданного сообщения, что в полете.

Пример, если прошло 15 секунд, я хочу продлить время ожидания еще на 20 секунд. Лучший пример в java-документах выше.

Из моего понимания в ссылках выше вы можете сделать это на стороне амазонки.

Ниже приведены мои текущие настройки;

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

Можно ли продлить этот таймаут?

+0

Извините, ваш вопрос непонятен. Мы раскрываем только те атрибуты, которые присутствуют в целевом «ReceiveMessageRequest». Я просто не понимаю, что бы вы хотели увидеть. –

+0

@ArtemBilan Надеюсь, теперь это ясно. – user101010101

ответ

1

OK. Похоже, я вижу твою мысль.

Мы можем изменить видимость для конкретного сообщения при помощи API:

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

Для этого в выходном потоке, вы должны получить доступ к (инъекционным) AmazonSQS боба и извлечение специальных заголовкам из 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.

Пожалуйста, поднимите вопрос GH для проекта Spring Cloud AWS по этому вопросу со ссылкой на эту тему.

+0

Похоже, у нас есть один: https://github.com/spring-cloud/spring-cloud-aws/issues/92 –