2016-07-13 13 views
1

Ist es möglich, die Sichtbarkeitszeit einer Nachricht, die sich im Flug befindet, zu verlängern?Aws-Integrationsfeder: Sichtbarkeitszeitlimit verlängern

Siehe:

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

Abschnitt: Ändern des Sichtbarkeitslimits einer Nachricht.

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

Zusammenfassend möchte ich in der Lage sein, den ersten Satz Sichtbarkeit Timeout für eine bestimmte Nachricht zu erweitern, die im Flug ist.

Beispiel wenn 15 Sekunden vergangen sind, möchte ich das Timeout um weitere 20 Sekunden verlängern. Besseres Beispiel in Java Docs oben.

Von meinem Verständnis in den oben genannten Links können Sie dies auf der Amazonas Seite tun.

Unten sind meine aktuellen Einstellungen;

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

Kann diese Zeitüberschreitung verlängert werden?

+0

Sorry, Ihre Frage ist nicht klar. Wir legen nur die Attribute offen, die im Ziel "ReceiveMessageRequest" vorhanden sind. Ich verstehe einfach nicht, was du sonst noch sehen möchtest. –

+0

@ ArtemBilan Ich hoffe, das ist jetzt klar. – user101010101

Antwort

1

OK. Sieht so aus, als ob ich deinen Standpunkt sehe.

Wir können die Sichtbarkeit für bestimmte Nachricht ändern API:

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

Zu diesem Zweck in Abströmung Sie Zugang zu erhalten müssen (injizieren) AmazonSQS Bohne und extrahieren spezielle Header aus dem 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); 

Aber eh, ich stimme zu, dass wir etwas zur Sache als out-of-the-Box-Funktion bereitstellen sollten. Das kann sogar etwas ähnliches sein wie QueueMessageAcknowledgment als neuer Header. Oder auch nur eine weitere changeMessageVisibility Methode zu diesem.

Bitte, werfen Sie ein GH-Problem für Spring Cloud AWS Projekt auf die Angelegenheit mit Link zu diesem Thema SO.

+0

Sieht so aus, als hätten wir schon eins: https://github.com/spring-cloud/spring-cloud-aws/issues/92 –