Skip to content

Created a draft of messaging-first-architecture#143

Open
gayatri-potawad wants to merge 2 commits into
Zuehlke:mainfrom
gayatri-potawad:message-driven-arch-draft
Open

Created a draft of messaging-first-architecture#143
gayatri-potawad wants to merge 2 commits into
Zuehlke:mainfrom
gayatri-potawad:message-driven-arch-draft

Conversation

@gayatri-potawad
Copy link
Copy Markdown

@gayatri-potawad gayatri-potawad commented Mar 9, 2026

After folder structure changes, needed to open a new PR for #98

have addressed all reviewers' comments from the old PR.

This article is just a kick-starter's info. I will be getting more into these topics and adding config files and code nuggets separately for each part.

I also received a suggestion to add observability more, so I am planning a few more articles on Azure, dead letter queues, and monitoring, etc.

FYI @tispBe

Copy link
Copy Markdown

@kunman93 kunman93 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this article with the help of AI. Otherwise I wouldn't have found this many findings. The next time, let AI review your article and then create a PR.

I also used the em-dash variant without spaces throughtout the article. Both variants are legit.

Also, please review my suggestions carefully, since English is not my first language.

---

# Messaging-First Architectures: Resilient Systems with Azure Service Bus

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Markdown Style: there's no need to add mutliple lines, since Markdown treats multiple blank lines as one blank line.

In one of my previous projects, I worked on a large-scale retail platform where nearly every critical business flow from orders to inventory updates relied on Azure Service Bus. This was my first dive into a messaging-first architecture on Azure.

This blog is my attempt to capture what I learned and design principles that shaped the system and hopefully help anyone walking a similar path, especially if you’re transitioning from synchronous REST-based APIs to asynchronous messaging.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change


In one of my previous projects, I worked on a large-scale retail platform where nearly every critical business flow from orders to inventory updates relied on Azure Service Bus. This was my first dive into a messaging-first architecture on Azure.

This blog is my attempt to capture what I learned and design principles that shaped the system and hopefully help anyone walking a similar path, especially if you’re transitioning from synchronous REST-based APIs to asynchronous messaging.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This blog is my attempt to capture what I learned and design principles that shaped the system and hopefully help anyone walking a similar path, especially if you’re transitioning from synchronous REST-based APIs to asynchronous messaging.
This blog is my attempt to capture what I learned and design principles that shaped the system and hopefully help anyone walking a similar pathespecially if you’re transitioning from synchronous REST-based APIs to asynchronous messaging.

Azure Service Bus is a fully managed enterprise message broker that enables decoupled communication between services using queues and topics.
If you’ve worked with something like ActiveMQ, Kafka, or RabbitMQ, a lot will feel familiar, but Azure adds cloud-native features like auto-scaling, integration with Azure Functions, and dead-letter handling.


Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

## 1. Azure Service Bus

Azure Service Bus is a fully managed enterprise message broker that enables decoupled communication between services using queues and topics.
If you’ve worked with something like ActiveMQ, Kafka, or RabbitMQ, a lot will feel familiar, but Azure adds cloud-native features like auto-scaling, integration with Azure Functions, and dead-letter handling.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you’ve worked with something like ActiveMQ, Kafka, or RabbitMQ, a lot will feel familiar, but Azure adds cloud-native features like auto-scaling, integration with Azure Functions, and dead-letter handling.
If you’ve worked with something like ActiveMQ, Kafka, or RabbitMQ, much of this will feel familiar. However, Azure adds cloud-native features like auto-scaling, integration with Azure Functions, and dead-letter handling.

If you’re close to the limit, compress the payload or store large data in blob storage and just pass a reference.

- Lock Timeouts
By default, a message lock lasts 30 seconds. If your function or processor takes longer, Azure will think it failed and redeliver the message. We observed implementing lock renewal, increases processing efficiency to avoid duplicate executions.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
By default, a message lock lasts 30 seconds. If your function or processor takes longer, Azure will think it failed and redeliver the message. We observed implementing lock renewal, increases processing efficiency to avoid duplicate executions.
By default, a message lock lasts 30 seconds. If your function or processor takes longer, Azure will assume it has failed and redeliver the message. We found that implementing lock renewal increased processing efficiency and helped avoid duplicate executions.


## Wrapping Up

This project really changed the way I think about service communication. Messaging-first isn’t just about queues and topics. It’s about designing for resilience, decoupling, and scale from day one.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This project really changed the way I think about service communication. Messaging-first isn’t just about queues and topics. It’s about designing for resilience, decoupling, and scale from day one.
This project really changed the way I think about service communication. Messaging-first isn’t just about queues and topics; it’s about designing for resilience, decoupling, and scale from day one.


But here’s the nuance: messaging-first doesn’t mean messaging-only.

Some interactions are still best done synchronously like fetching user details for a UI in real time or validating input. The real strength comes from knowing where async fits best: background jobs, cross-system workflows, retries, or anything that shouldn’t block the user.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Some interactions are still best done synchronously like fetching user details for a UI in real time or validating input. The real strength comes from knowing where async fits best: background jobs, cross-system workflows, retries, or anything that shouldn’t block the user.
Some interactions are still best done synchronously, such as fetching user details for a UI in real time or validating input. The real strength comes from knowing where async fits best: background jobs, cross-system workflows, retries, or anything that shouldn’t block the user.


Some interactions are still best done synchronously like fetching user details for a UI in real time or validating input. The real strength comes from knowing where async fits best: background jobs, cross-system workflows, retries, or anything that shouldn’t block the user.

Systems can be hybrid. It’s not one or the other. It’s about picking the right tool for the job.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Systems can be hybrid. It’s not one or the other. It’s about picking the right tool for the job.
Systems can be hybrid. It’s not one or the other; it’s about picking the right tool for the job.


Systems can be hybrid. It’s not one or the other. It’s about picking the right tool for the job.

If you're building distributed systems on Azure, or transitioning from a synchronous mindset like I was, I hope this gives you a good head start.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
If you're building distributed systems on Azure, or transitioning from a synchronous mindset like I was, I hope this gives you a good head start.
If youre building distributed systems on Azure, or transitioning from a synchronous mindset like I was, I hope this gives you a good head start.

Copy link
Copy Markdown

@kunman93 kunman93 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this article with the help of AI. Otherwise I wouldn't have found this many findings. The next time, let AI review your article and then create a PR.

I also used the em-dash variant without spaces throughtout the article. Both variants are legit.

Also, please review my suggestions carefully, since English is not my first language.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants