mirror of https://github.com/apache/jclouds.git
add ChangeMessageVisibility to sqs
This commit is contained in:
parent
b0626e3324
commit
4da4146062
|
@ -166,6 +166,48 @@ public interface SQSApi {
|
|||
*/
|
||||
void deleteMessage(URI queue, String receiptHandle);
|
||||
|
||||
/**
|
||||
* The ChangeMessageVisibility action changes the visibility timeout of a
|
||||
* specified message in a queue to a new value. The maximum allowed timeout
|
||||
* value you can set the value to is 12 hours. This means you can't extend
|
||||
* the timeout of a message in an existing queue to more than a total
|
||||
* visibility timeout of 12 hours. (For more information visibility timeout,
|
||||
* see Visibility Timeout in the Amazon SQS Developer Guide.)
|
||||
*
|
||||
* For example, let's say the timeout for the queue is 30 seconds, and you
|
||||
* receive a message. Once you're 20 seconds into the timeout for that
|
||||
* message (i.e., you have 10 seconds left), you extend it by 60 seconds by
|
||||
* calling ChangeMessageVisibility with VisibilityTimeoutset to 60 seconds.
|
||||
* You have then changed the remaining visibility timeout from 10 seconds to
|
||||
* 60 seconds.
|
||||
*
|
||||
* <h4>Important</h4>
|
||||
*
|
||||
* If you attempt to set the VisibilityTimeout to an amount more than the
|
||||
* maximum time left, Amazon SQS returns an error. It will not automatically
|
||||
* recalculate and increase the timeout to the maximum time remaining.
|
||||
*
|
||||
* <h4>Important</h4>
|
||||
*
|
||||
* Unlike with a queue, when you change the visibility timeout for a specific
|
||||
* message, that timeout value is applied immediately but is not saved in
|
||||
* memory for that message. If you don't delete a message after it is
|
||||
* received, the visibility timeout for the message the next time it is
|
||||
* received reverts to the original timeout value, not the value you set with
|
||||
* the ChangeMessageVisibility action.
|
||||
*
|
||||
* @param queue
|
||||
* the queue the message is in
|
||||
* @param receiptHandle
|
||||
* The receipt handle associated with the message whose visibility
|
||||
* timeout you want to change. This parameter is returned by the
|
||||
* ReceiveMessage action.
|
||||
* @param visibilityTimeout
|
||||
* The new value for the message's visibility timeout (in seconds)
|
||||
* from 0 to 43200 (maximum 12 hours)
|
||||
*/
|
||||
void changeMessageVisibility(URI queue, String receiptHandle, int visibilityTimeout);
|
||||
|
||||
/**
|
||||
* The SendMessage action delivers a message to the specified queue. The
|
||||
* maximum allowed message size is 64 KB.
|
||||
|
|
|
@ -126,6 +126,15 @@ public interface SQSAsyncApi {
|
|||
@FormParams(keys = ACTION, values = "DeleteMessage")
|
||||
ListenableFuture<Void> deleteMessage(@EndpointParam URI queue, @FormParam("ReceiptHandle") String receiptHandle);
|
||||
|
||||
/**
|
||||
* @see SQSApi#changeMessageVisibility
|
||||
*/
|
||||
@POST
|
||||
@Path("/")
|
||||
@FormParams(keys = ACTION, values = "ChangeMessageVisibility")
|
||||
ListenableFuture<Void> changeMessageVisibility(@EndpointParam URI queue,
|
||||
@FormParam("ReceiptHandle") String receiptHandle, @FormParam("VisibilityTimeout") int visibilityTimeout);
|
||||
|
||||
/**
|
||||
* @see SQSApi#sendMessage
|
||||
*/
|
||||
|
|
|
@ -164,6 +164,36 @@ public class SQSApiExpectTest extends BaseSQSApiExpectTest {
|
|||
apiWhenExist.deleteMessage(URI.create("https://sqs.us-east-1.amazonaws.com/993194456877/adrian-sqs11/"),
|
||||
"eXJYhj5rDr9cAe");
|
||||
}
|
||||
|
||||
|
||||
public HttpRequest changeMessageVisibility = HttpRequest.builder()
|
||||
.method("POST")
|
||||
.endpoint("https://sqs.us-east-1.amazonaws.com/993194456877/adrian-sqs11/")
|
||||
.addHeader("Host", "sqs.us-east-1.amazonaws.com")
|
||||
.addFormParam("Action", "ChangeMessageVisibility")
|
||||
.addFormParam("ReceiptHandle", "eXJYhj5rDr9cAe")
|
||||
.addFormParam("Signature", "gvmSHleGLkmszYU6aURCBImuec2k0O3pg3tAYhDvkNs%3D")
|
||||
.addFormParam("SignatureMethod", "HmacSHA256")
|
||||
.addFormParam("SignatureVersion", "2")
|
||||
.addFormParam("Timestamp", "2009-11-08T15%3A54%3A08.897Z")
|
||||
.addFormParam("Version", "2011-10-01")
|
||||
.addFormParam("VisibilityTimeout", "10")
|
||||
.addFormParam("AWSAccessKeyId", "identity").build();
|
||||
|
||||
public void testChangeMessageVisibilityWhenResponseIs2xx() throws Exception {
|
||||
|
||||
HttpResponse changeMessageVisibilityResponse = HttpResponse.builder()
|
||||
.statusCode(200)
|
||||
.payload(
|
||||
payloadFromStringWithContentType(
|
||||
"<ChangeMessageVisibilityResponse><ResponseMetadata><RequestId>b5293cb5-d306-4a17-9048-b263635abe42</RequestId></ResponseMetadata></ChangeMessageVisibilityResponse>",
|
||||
"text/xml")).build();
|
||||
|
||||
SQSApi apiWhenExist = requestSendsResponse(changeMessageVisibility, changeMessageVisibilityResponse);
|
||||
|
||||
apiWhenExist.changeMessageVisibility(URI.create("https://sqs.us-east-1.amazonaws.com/993194456877/adrian-sqs11/"),
|
||||
"eXJYhj5rDr9cAe", 10);
|
||||
}
|
||||
|
||||
public HttpRequest getQueueAttributes = HttpRequest.builder()
|
||||
.method("POST")
|
||||
|
|
|
@ -22,6 +22,7 @@ import static org.jclouds.sqs.options.ListQueuesOptions.Builder.queuePrefix;
|
|||
import static org.jclouds.sqs.options.ReceiveMessageOptions.Builder.attribute;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNotNull;
|
||||
import static org.testng.Assert.assertNull;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
|
@ -111,11 +112,26 @@ public class SQSApiLiveTest extends BaseSQSApiLiveTest {
|
|||
assertEquals(api().receiveMessage(queue, attribute("All").visibilityTimeout(0)).getMD5(), md5);
|
||||
}
|
||||
}
|
||||
|
||||
String receiptHandle;
|
||||
|
||||
@Test(dependsOnMethods = "testReceiveMessageWithoutHidingMessage")
|
||||
protected void testChangeMessageVisibility() {
|
||||
for (URI queue : queues) {
|
||||
// start hiding it at 5 seconds
|
||||
receiptHandle = api().receiveMessage(queue, attribute("None").visibilityTimeout(5)).getReceiptHandle();
|
||||
// hidden message, so we can't see it
|
||||
assertNull(api().receiveMessage(queue));
|
||||
// this should unhide it
|
||||
api().changeMessageVisibility(queue, receiptHandle, 0);
|
||||
// so we can see it again
|
||||
assertEquals(api().receiveMessage(queue, attribute("All").visibilityTimeout(0)).getMD5(), md5);
|
||||
}
|
||||
}
|
||||
|
||||
@Test(dependsOnMethods = "testChangeMessageVisibility")
|
||||
protected void testDeleteMessage() throws InterruptedException {
|
||||
for (URI queue : queues) {
|
||||
String receiptHandle = api().receiveMessage(queue, attribute("None").visibilityTimeout(0)).getReceiptHandle();
|
||||
api().deleteMessage(queue, receiptHandle);
|
||||
assertNoMessages(queue);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue