Oh, sorry – I had not understood the message flow in your processes fully.
So: P1 invokes P3 which invokes P2 which then should receive a message from P1, right?
The message flow cannot guarantee that P2 is ready. Either P2 or P3 have to communicate to P1 that P2 has been started. Only then can the message be sent.
When we work in a distributed setting (and I consider multiple communicating processes as a distributed system), messages are the primary (if not the only) means for synchronization. Camunda 7 does not buffer messages, so we have to use message to tell the partner that we are ready or take care of buffering messages.
The latter has been discussed several times in the forum, e.g.: