Message Routing

Routing Slip

Attach the remaining itinerary to the message and let each processor forward it to the next listed step.

itinerarydynamicsequence
The problem
How do we route a message consecutively through a series of processing steps when the sequence of steps is not known at design-time and may vary for each message?
Adapted from Enterprise Integration Patterns under CC BY 3.0. The visualization and explanatory content on this page are original GateSift material.
Original GateSift visualization

How Routing Slip works

A routing decision sends the message along one of several possible paths.

Incoming message
Routing Slip
Route A
Route B
Fallback
1

Inspect message content, metadata, state or routing configuration.

2

Use Routing Slip to select the next destination or processing step.

3

Continue on the selected path while keeping the producer decoupled from destinations.

GateSift explanation

What this pattern helps you decide

Attach the remaining itinerary to the message and let each processor forward it to the next listed step.

What happens when processing fails or the same message is delivered twice?
Where does state, correlation or routing configuration live?
How will operators trace the message and understand the decision path?
Common Azure implementations

Where you may see it

  • Workflow steps stored in message metadata
  • Durable Functions dynamic activity list
  • Configuration-driven Logic App routing
GateSift relevance

How the analyzers can surface it

  • Dynamic sequential destinations
  • Route metadata

Pattern detection is contextual. GateSift should present these as architectural signals, not claim a pattern is implemented solely because one policy statement or adapter exists.

Source, licence and attribution

The pattern name and selected problem statement are adapted from Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf under CC BY 3.0. GateSift summaries, Azure mappings, analyzer guidance and diagrams are original. No endorsement by the original authors is implied.

Back to pattern library