Start here. This is the direct spoken answer to practice first.
Overview
Spring application events decouple code inside one process; they are not a durable integration channel by default.
I use a Spring application event when publishers and listeners live in the same application and losing the event with the process is acceptable. By default, event listeners run synchronously in the publishing thread, so their failure and latency can affect the publisher. I use durable messaging when work must survive restart, cross a service boundary, be retried independently, or support replay and operational ownership.