when a client is asking something to an abstracted service (via topic/queue). The indirection abstraction allows you to scale out the number of process that are able to provide answers on behalf of the service/topic.
First: when the broker ack the client that it has received its message (“your message won’t be lost”).
when one or multiple publishers want to fan-out a message to multiple consumers. The publisher is usually not aware of its subscribers. It does not know who they are and how many they are.
A stream-based with “sorry I’m late, can you remind me the state of the world first and then keeping me updated of any further change” subscription messaging pattern.
Pub-Sub and Request-Reply-with-interest are 1-to-many
These are 3 major messaging patterns that you can implement in so many (complex) ways depending on your context, ecosystem, network, etc
Focus on the usages first