The issue arises because SQS FIFO queues ensure strict message ordering by processing messages with the same MessageGroupId one at a time. If all events are assigned the same MessageGroupId, processing becomes bottlenecked.
To solve this problem while preserving order for specific use cases (e.g., per store), you can make the MessageGroupId dynamic.
For example one groupID per store or per type
{
"MessageGroupId": "store1.shopify.com",
"MessageBody": "{...event data...}"
}
you need to consider the throughput limits: FIFO queues support up to 300 messages per second per MessageGroupId. If even a single group hits this limit, consider splitting the group further. Also, adjusting the MessageGroupId scope changes the ordering guarantees. Make sure your application logic aligns with this change.
Or consider changing from SQS Fifo to normal SQS