Start here. This is the direct spoken answer to practice first.
Why this question matters
Communication style changes both the user experience and the failure model. The useful choice comes from when the result is needed and what the system must do when the other component is slow or unavailable.
I would use a synchronous call when the caller needs an immediate result to continue, such as validating credentials or reading current product data. I would use asynchronous messaging when work is long-running, bursty, fan-out oriented, or can finish after the user receives an acknowledgement. An asynchronous API can durably record the request, return an accepted response with an operation id, and let a worker update status. A queue decouples time and absorbs bursts, but it also introduces duplicate delivery, delayed completion, retries, and operational state that the design must handle.