Should(n’t) peek and lock a message from Azure Service Bus for 5 hours

Radu Vunvulea
3 min readMay 19, 2020

--

Source: http://vunvulearadu.blogspot.com/2020/05/shouldnt-peek-and-lock-message-from.html

Let’s talk about anti-patterns when business drives technology.
Imagine that you are working for a bank where you implement a message base communication build on top of Azure Service Bus.
Everything works great for a few years until one of the business stakeholders implement their business application in such a way that a message needs to be locked for 5 hours. They used competing consumer pattern to support business requirements — to wait for confirmation from external users for a maximum of 5 hours. If there is no confirmation from the users, the request (message) shall be processed one more time.

Issues
There are some mistakes in the way how business reqs was implemented:
(1) The maximum Peek and Lock of a message from Azure Service Bus is 5 minutes. It is impossible to peek a message from a subscription or queue and do a lock for 5 hours.
(2) It does not clearly define the number of retries. If the user(s) does not confirm the action would mean that the message will be available over and over again. They are blocking other messages to be processed and increase the load of the system. You would need to specify a maximum number of retries before pushing the message to dead-letter queues.
For actions that take longer than 1 or 2 minutes, Peek and Lock on top of Azure Service Bus might not be the best solution. You would need to challenge yourself and see if an ESB is the best option for your needs.

Alternative solution
The advantage with Peek and Lock and Azure Service Bus is reliability. When content it is not processed with success by the consumer, the message is available again in the subscription for another try. The tricky part is to find a simple way to have the same quality attribute at a low cost.
After discussion with the business stakeholder, we identified that the maximum retry times is 3, and because of multiple consumers, Azure Service Bus is one of the preferred solutions. Azure Cosmos DB is reliable storage that could be used in combination with TTL feature.
We could have a system that consumes messages from Azure Service Bus in Peek and Lock mode. The message is pushed to Azure Cosmos DB as a document with TTL (Time To Leave) set to 5 hours. It means that for 5 hours the content is stored in Cosmos DB. If the user or 3rd party confirm the action, the message can be automatical removed from Azure Cosmos DB.
When TTL expires, an Azure Functions can be registered to receive the notification and push the message back to Azure Service Bus. At this phase, the retry counter can be incremented with 1. When the retry counter is equal with 3 we can log the issue and generate a business alert.

Things to consider:
(1) The role of Azure Service Bus to manage multiple consumers is crucial. Implementing it directly on a NoSQL solution it is error prompt.
(2) We still use Peek and Lock at the consumer level to ensure that we have a reliable way to process the message and send it to Azure Cosmos DB.
(3) Any fatal error at Azure Functions level needs to be managed by ourselves, and it is the only location where we could lose a message because of an application error. The Service Bus consumer is protected by Peek and Lock.

In the below diagrams, you can find a high-level overview of the solution.

Conclusion
Of course, we might find another solution. For the current case, I consider this one of the most simple solutions that have a low impact on implementation cost and without affecting the operations activities. Both Azure Service Bus and Azure Cosmos DB are reliable storages for messages and documents and Peek and Lock combined with TTL help us to connect the end-to-end flow.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Radu Vunvulea
Radu Vunvulea

Written by Radu Vunvulea

Technology enthusiast that runs away from stupidity and enjoy the simple life of the cloud era. Speaker, traveler and crafter, he is a wine and coffee lover

No responses yet

Write a response