Skip to content

Instantly share code, notes, and snippets.

@carlosroman
Created May 6, 2016 13:36
Show Gist options
  • Save carlosroman/b340fddc097b42c6ed5aa0db29106036 to your computer and use it in GitHub Desktop.
Save carlosroman/b340fddc097b42c6ed5aa0db29106036 to your computer and use it in GitHub Desktop.
Example Large SQS message
package com.example.sqs.large.message;
import com.amazon.sqs.javamessaging.AmazonSQSExtendedClient;
import com.amazon.sqs.javamessaging.ExtendedClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;
import com.amazonaws.services.sqs.model.*;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.List;
import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
public class MessageTest {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageTest.class);
@Test
public void shouldSendLargeSQSMessage() throws Exception {
final AWSCredentials credentials = new ClasspathPropertiesFileCredentialsProvider().getCredentials();
final AmazonS3 s3 = new AmazonS3Client(credentials);
final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration()
.withLargePayloadSupportEnabled(s3, "m2a-test-bucket");
final AmazonSQS amazonSQS = new AmazonSQSExtendedClient(new AmazonSQSClient(credentials), extendedClientConfig);
final Region sqsRegion = Region.getRegion(Regions.EU_WEST_1);
amazonSQS.setRegion(sqsRegion);
final String messageBody = getMessageBody();
final String queueUrl = "https://sqs.eu-west-1.amazonaws.com/544419717474/carlos-campaign-email-test";
final SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, messageBody);
final SendMessageResult sendMessageResult = amazonSQS.sendMessage(sendMessageRequest);
LOGGER.info("MessageId:{}, bodyMd5:{}", sendMessageResult.getMessageId(), sendMessageResult.getMD5OfMessageBody());
final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
final List<Message> messages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages();
assertThat(messages).hasSize(1);
final Message message = messages.get(0);
assertThat(message.getBody()).isEqualTo(messageBody);
amazonSQS.deleteMessage(new DeleteMessageRequest(queueUrl, message.getReceiptHandle()));
}
private String getMessageBody() {
final SecureRandom random = new SecureRandom();
StringBuilder stringBuilder = new StringBuilder(20202);
stringBuilder.append("LargeMessage:");
IntStream.rangeClosed(0, 20102).forEach(x-> stringBuilder.append(new BigInteger(130, random).toString(32)));
return stringBuilder.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment