Skip to content
Binary file added assets/images/posts/aws-cdk/construct-hub.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/posts/aws-sqs/cloudwatch-log.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/posts/aws-sqs/lambda-trigger.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/posts/aws-sqs/sqs-queue.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/.DS_Store
Binary file not shown.
36 changes: 24 additions & 12 deletions content/blog/2021/2021-05-10-spring-cloud-aws-sqs.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,12 @@ With the `QueueMessageChannel`, we first create an instance of this class to rep
```java
@Service
public class MessageSender {
private static final Logger logger = LoggerFactory.getLogger(MessageSender.class);
private static final Logger logger
= LoggerFactory.getLogger(MessageSender.class);

// Replace XXXXX with AWS account ID.
private static final String QUEUE_NAME = "https://sqs.us-east-1.amazonaws.com/XXXXXXX/testQueue";
private static final String QUEUE_NAME
= "https://sqs.us-east-1.amazonaws.com/XXXXXXX/testQueue";

@Autowired
private final AmazonSQSAsync amazonSqs;
Expand All @@ -148,7 +150,8 @@ public class MessageSender {
}

public boolean send(final String messagePayload) {
MessageChannel messageChannel = new QueueMessageChannel(amazonSqs, QUEUE_NAME);
MessageChannel messageChannel
= new QueueMessageChannel(amazonSqs, QUEUE_NAME);

Message<String> msg = MessageBuilder.withPayload(messagePayload)
.setHeader("sender", "app1")
Expand Down Expand Up @@ -213,7 +216,10 @@ public class MessageSenderWithTemplate {
@Autowired
private QueueMessagingTemplate messagingTemplate;

public void sendToFifoQueue(final String messagePayload, final String messageGroupID, final String messageDedupID) {
public void sendToFifoQueue(
final String messagePayload,
final String messageGroupID,
final String messageDedupID) {

Message<String> msg = MessageBuilder.withPayload(messagePayload)
.setHeader("message-group-id", messageGroupID)
Expand Down Expand Up @@ -294,7 +300,7 @@ for GenericMessage /
"email":"jackie.chan@gmail.com"}, headers={
...
...
```text
```
We can see a `MessageConversionException` here since the default converter `SimpleMessageConverter` can only convert between `String` and SQS messages. For complex objects like `SignupEvent` in our example, a custom converter needs to be configured like this:

```java
Expand All @@ -316,14 +322,15 @@ public class CustomSqsConfiguration {
new QueueMessageHandlerFactory();
queueHandlerFactory.setAmazonSqs(amazonSQSAsync);
queueHandlerFactory.setArgumentResolvers(Collections.singletonList(
new PayloadMethodArgumentResolver(jackson2MessageConverter(mapper))
new PayloadMethodArgumentResolver(jackson2MessageConverter(mapper))
));
return queueHandlerFactory;
}

private MessageConverter jackson2MessageConverter(final ObjectMapper mapper){

final MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
final MappingJackson2MessageConverter
converter = new MappingJackson2MessageConverter();
converter.setObjectMapper(mapper);
return converter;
}
Expand Down Expand Up @@ -353,11 +360,14 @@ public class CustomSqsConfiguration {
...
...

private MessageConverter jackson2MessageConverter(final ObjectMapper mapper) {
private MessageConverter jackson2MessageConverter(
final ObjectMapper mapper) {

final MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
final MappingJackson2MessageConverter
converter = new MappingJackson2MessageConverter();

// set strict content type match to false to enable the listener to handle AWS events
// set strict content type match to false
// to enable the listener to handle AWS events
converter.setStrictContentTypeMatch(false);
converter.setObjectMapper(mapper);
return converter;
Expand All @@ -380,9 +390,11 @@ Our class `S3EventListener` containing the listener method which will receive th
@Service
public class S3EventListener {

@SqsListener(value = "testS3Queue", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
@SqsListener(value = "testS3Queue",
deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void receive(S3EventNotification s3EventNotificationRecord) {
S3EventNotification.S3Entity s3Entity = s3EventNotificationRecord.getRecords().get(0).getS3();
S3EventNotification.S3Entity s3Entity
= s3EventNotificationRecord.getRecords().get(0).getS3();
String objectKey = s3Entity.getObject().getKey();
log.info("objectKey:: {}",objectKey);
}
Expand Down
Loading