I am trying to implement AWS SQS FIFO queue using spring boot(v2.2.6.RELEASE).
Created a queue, "Testing.fifo" in aws. Left all other fields to default while creating the queue.
My producer and consumer to the queue run on a single service.
code to put messages to queue
private void sendMessageToSqsFiFo(String queueName, Object obj, String messageGroupId, String messageDeduplicationId) {
// TODO Auto-generated method stub
if (messageGroupId == null) {
// setting a default group
messageGroupId = "default_group_id";
}
if (messageDeduplicationId == null) {
// setting unique deduplication id for all messages
messageDeduplicationId = "sqs-fifo-deduplication-" +UUID.randomUUID();
}
Map<String, Object> headers = new HashMap<>();
headers.put("message-group-id", messageGroupId);
headers.put("message-deduplication-id", messageDeduplicationId);
queueMessagingTemplate.convertAndSend(queueName, obj, headers);
System.out.println("Message sent to FIFO "+ queueName);
}
Queue listener code
@SqsListener(value = "Testing.fifo", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
private void getMessageFromgeneralQdasd(Map<String, String> msg, @Header("MessageId") String messageId, Acknowledgment ack) {
System.out.println("Message from FIFO: " + msg.toString());
ack.acknowledge();
}
I am putting some messages to queue on service start up
@EventListener(ApplicationReadyEvent.class)
public void doSomethingAfterStartup() {
System.out.println("hello world, I have just started up");
for(int i=0;i<25;i++) {
Map<String, String> data = new HashMap<String, String>();
data.put("message", i + "th msg");
sendMessageToSqsFiFo("Testing.fifo", data, null, null);
}
}
I am expecting a sysot log like this
Message from FIFO: {message=0th msg}
Message from FIFO: {message=1th msg}
Message from FIFO: {message=2th msg}
Message from FIFO: {message=3th msg}
......
Message from FIFO: {message=24th msg}
in the order I pushed data to queue
But I got
Message from FIFO: {message=0th msg}
Message from FIFO: {message=2th msg}
Message from FIFO: {message=3th msg}
Message from FIFO: {message=1th msg}
Message from FIFO: {message=4th msg}
Message from FIFO: {message=6th msg}
Message from FIFO: {message=7th msg}
Message from FIFO: {message=5th msg}
Message from FIFO: {message=8th msg}
Message from FIFO: {message=9th msg}
Message from FIFO: {message=10th msg}
Message from FIFO: {message=11th msg}
Message from FIFO: {message=12th msg}
Message from FIFO: {message=13th msg}
Message from FIFO: {message=14th msg}
Message from FIFO: {message=15th msg}
Message from FIFO: {message=16th msg}
Message from FIFO: {message=17th msg}
Message from FIFO: {message=19th msg}
Message from FIFO: {message=18th msg}
Message from FIFO: {message=20th msg}
Message from FIFO: {message=21th msg}
Message from FIFO: {message=22th msg}
Message from FIFO: {message=23th msg}
Message from FIFO: {message=24th msg}
Am I doing anything wrong.?
using dependency aws-java-sdk 1.11.586