I need to account for DR while architecting my cloud solution on Azure.
It is easy to geo-replicate SQL databases and storage accounts across regions, but there is no native solution for Azure Service Bus (or any of the brokers really).
Since SQL Persistence + Outbox can guarantee Exactly-Once with deduplication, I thought it could be possible to use the Outbox records in the DR site to continue distributed workflows that got stuck due to abandoning the old site.
I am aware that SQL Geo-Replication will incur data loss in case of a failover, but that is acceptable in my domain.
what we would like though is that business flows either fully succeed or fully fail, without leaving the system in a corrupt state.
In the DR site I would read the all Outbox records for the last X mins, deserialize the outgoing operations, and re-send all the messages via the raw transport.
My only problem with this approach, is that the outgoing operations get removed from the Outbox record when it is marked as dispatched, and the SqlDialect is marked as internal, so I cant update the statement.
Is this approach wrong?
How does the rest of the community guarantee message delivery in DR scenarios?