Good question. I try to explain the two main points quickly:
- combination with buffering of messages (i.e. time-to-live > 0). A workflow may have multiple message catch events for the same message (name + correlation-key), for example, aggregate incoming messages. Following the rule “a message correlates to all open subscriptions”, all buffered messages must be correlated to this message catch event even if they are correlated before. In most cases, this is not what you want.
- the BPMN semantic of message events. According to the specification, a message is sent to a single receiver. If an event should be broadcast then it must be a signal event.