- Cure call-stack mentality.
Gregor Hohpe has a nice piece about the whole area (replete with useful pictures) here.
If you start distributed systems design with experience in OO and Web Page apps in your head, assymetrical thinking is very natural. After all HTTP is request/response which is caller/callee, therefore...method/function calls are the fundamental particles of Web based system design.
Unfortunately, as practitioners of distributed systems know, the tight temporal coupling between the caller and the callee is the root cause of fantastically tall mountains of both engineering complexity and organisational complexity.
It will come as no surprise that I agree with Gregor that asynch. messaging is the right abstraction. It is the fundamental abstraction of the PSB integration infrastructure for example.
Even in a pure asynch messaging system however, asynchrony between caller and callee is an issue. In process-to-process integration, messages need to "hop" in a realiable and auditable way across organisational boundaries. The question inevitably arises - "who instigates a hop?".
- Does the ultimate reciever for a message attempt to get one? (PULL Model)
- Does the sender attempt to send one? (PUSH Model)
Finding a solution in any particular system is much more than just flicking a coin. There are many issues at play here ranging from technical to organisational.
The issues, as experienced in the design of the PSB, are fleshed out here.
I am a strong advocate of pull-based asynch messaging. When asked why, I point to the world-wide e-mail system and ask the question : which is easier, (a) accessing your e-mail from with a simple POP3/IMAP4 account or (b) setting up an SMTP server and then talking to it?
Now there are absolutely cases where the SMTP server analogy is the right one, but in my experience, a lot of folk who should be thinking of asynch. XML messaging in POP3 terms, think of it in SMTP terms. At the root of the issue is how the question of the choreography of messaging hopping has been conceptualised.