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
Created
August 10, 2022 21:59
-
-
Save tostka/ebebbad16d38c889b4dc0efff67e51a4 to your computer and use it in GitHub Desktop.
Exch Onprem Retry Logic Flowchart (mermaid)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment