Skip to content

Instantly share code, notes, and snippets.

@tostka
Created August 10, 2022 21:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tostka/ebebbad16d38c889b4dc0efff67e51a4 to your computer and use it in GitHub Desktop.
Save tostka/ebebbad16d38c889b4dc0efff67e51a4 to your computer and use it in GitHub Desktop.
Exch Onprem Retry Logic Flowchart (mermaid)
flowchart TD
  EStart([Message arrives at queue]) --> A1TrySend[Exchange tries to deliver message]
  A1TrySend -->D1{Message can be sent?}
  D1 -->|Yes| EvtDelivered([Message Delivered Externally])
  D1 -->|No| D1A500{Error -class returned?}
  D1A500 -->|500 Perm Fail| EvtNDR([Send Sender NDR Failure])
  D1A500 -->|400 Retryable| D1BExpired{"MessageExpirationTimeout expired? <br/>(2d)"}
  D1BExpired -->|Yes| EvtNDR
  D1BExpired -->|No| D1CDsn{"DelayNotificationTimeOut expired?<br/>(4h)"}
  D1CDsn -->|Yes| EvtDSN([Send Sender DSN])
  D1CDsn -->|No| D1DMaxIdle{"MaxIdleTimeBeforeResubmit  expired?<br/>(12h)"}
  D1DMaxIdle -->|Yes| A1TrySend 
  D1DMaxIdle -->|No| D2{Message needs to be sent to mailbox server}
  D2 -->|Yes| D3{MailboxDeliveryQueueRetryInterval expired?}
  D2 -->|No| D4{QueueGlitchRetryInterval Expired?}
  D3 -->|No| A2["Wait MailboxDeliveryQueueRetryInterval<br/>(5min)"] --> D3
  D3 -->|Yes| A1TrySend
  D4 -->|Yes| D5{"QueueGlitchRetryCount exceeded?<br/>(4x at 1min interval)"}
  D4 -->|No| A3["Wait QueueGlitchRetryInterval<br/>(1min)"] --> D4
  D5 -->|Yes| D6{"TransientFailureRetryCount exceeded?<br/>(6x at 5min interval)"}
  D5 -->|No| A1TrySend
  D6 -->|Yes| D7{OutboundConnectionFailureRetryInterval expired?}
  D6 -->|No| D8{TransientFailureRetryInterval expired?}
  D6 -->|Yes| A1TrySend
  D7 -->|Yes| A1TrySend
  D7 -->|No| A4["Wait OutboundConnectionFailureRetryInterval<br/>(10min)"] --> D7
  D8 -->|Yes| A1TrySend
  D8 -->|No| A5["Wait TransientFailureRetryInterval<br/>(5min)"] --> D8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment