In this scenario intermediaries only acknowledge a message when they have received the acknowledgement from the next hop, which might be another intermediary or the ultimate destination. By "relaying" the acks an end-to-end reliability is created because a message will only be acknowledged as it is acknowledged by the ultimate destination.
- The sender does not have to know the ultimate destination (MSH URL) of its messages;
- WS-RM is used to support the RM functionality;
- The communicationpath between the two endpoint MSH's contains one or more intermediaries;
Each intermediary must have a sequence relation table, let's say the SRT, in which it relates sequence id's for which it receives messages to sequence id's which it uses to send messages.
Now when a CreateSequence RM signal is received by the intermediary the sequence id for the new sequence is added to the SRT without a related "sending sequence id". The related (sending) sequence id can't be set at this point because we don't know the ultimate destination of this sequence. This will only be known at the arrival of the first ebMS user message.
So when the first ebMS user message arrives the next hop on the communication path is determined by the intermediary and a new WS-RM sequence is set up with the next hop by sending a CreateSequence signal to it. The resulting sequence id is added to the already created entry in the SRT. Now all WS-RM signals, including the acknowledgments, can be relayed between the two sequences.
Advantage of this solution is that it does not require additional processing on the endpoints to get end-to-end reliability. Because the intermediary relays everything based on its SRT it also works using asynchronous intermediaries
The main drawback is that because the RM path being divided into separate legs there's no end-to-end security on the RM level.
t: +31 6 51507886