Sending reliable notifications to other services: The sender can guarantee that the message will be delivered to the receiver at least once.
Sending event notifications in choreography-based Sagas: One service can reliably notify others about its state change.
Updating query-side materialized views: To reliably notify query-side Microservices about the state changes on the command side so that they can update their materialized views.
Takeaways
When sending notifications amongst microservices, use an asynchronous, event-driven approach for better reliability and scalability.
While doing so, dual writes are inevitable. Hence use the Outbox pattern to avoid that and introduce reliable delivery for notifications.
There are few implementation choices for the pattern, but a log-based CDC approach seems the popular choice.
The pattern might deliver duplicate notifications. But you should make the consumers idempotent to avoid that.