OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ebxml-msg message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RE: [ebxml-msg] multi-hop / routing: current state of discussions



Here are some more (unfortunately somewhat pessimistic) thoughts on 
intelligent routing and WS-ReliableMessaging.

If we are talking about routing based on ebMS based on ebMS header
information, a common requirement for and benefit of the intermediary
is that it can serve to decouple the sender and the recipient and
to centralize some configuration change management:

(1) It allows two partners to communicate even they are in different
networks without even a shared DNS.
(2) If the connection properties of Partner B change, it allows B to
just communicate these changes to the Intermediary from which it
receives incoming messages, not to all partners sending via that
intermediary. 
(3) If Partner B distributes its services over multiple MSHs and some
ebMS-aware dispatcher is used to distribute messages to the correct
MSH, B's partners should not have to know how many MSHs B has, but
only the address of the dispatcher. 

The third use case is about giving B the freedom to add MSHs as
traffic patterns evolve.  B should also be able to change the routing
logic without having to tell A. For example, to move from To/PartyId
based routing to Service/Action based routing to routing based on more
dynamic properties, e.g. (RefTo)MessageId or ConversationId. The
latter would support a kind of ebXML load balancing, assuming a
conversation/transaction affinity similar to the way some networking
appliances implement TLS session affinity.

To me it seems there is a basic incompatibility between wanting to
support intelligent ebMS-aware routing by an intermediary and wanting
to implement end-to-end reliability using WS-ReliableMessaging and
WS-A.  The sequence concept of WS-RM requires all messages sent in the
sequence to be delivered to a single MSH. This means that a sending
MSH needs (i) to know all different(ultimate) MSHs it will send
messages to, (ii) to set up sequences with all these MSHs and (iii) to
send each message on the correct sequence. If it knew all this, would
it still need an intelligent intermediary? There is some discussion on
message ordering and multiple recipient MSHs in an early ebXML IIC
document: M. Wang. ebMS Implementation Guidelines. Version 0.2. 2002.
URL:
http://www.oasis-open.org/committees/download.php/2950/ebMS_implementationGu
idelines.doc

If Partner A establishes a sequence with Partner B, and some
intermediary happens to send some messages from the sequence to a
different MSH, the sequence fails. This problem would not occur if we
could have end-to-end reliability without having to use message
ordering, as was possible with ebMS 2.0. There are production ebMS 2.0
deployments that support this. Unfortunately, WS-ReliableMessaging
implements reliability using sequencing. And due to the
CreateSequence, TerminateSequence overhead for every sequence,
WS-ReliableMessaging is not useful when the sequence consists of just
one message to send.

When using an ebMS3 intermediary or any form of intermediary that has
some intelligent routing capability, use of message ordering protocols
like WS-ReliableMessaging imposes a requirement that the end-to-end
association between originating MSH and ultimate MSH is the same for
any message in a sequence. This requirement can be a property of the
way the routing is set up. If routing is based on To/PartyId, and if
there is just one MSH per To/PartyId, and if the sender sets up a
different sequence for all its business partners, this would
work. When using a more fine-grained (routing based on Service) or
dynamic (e.g. load balancing between multiple MSHs) type of routing
the intermediary should probably record the assigned MSH for any
sequence and reuse it for all subsequent messages. I.e. only the first
sequence in the sequence should be inspected to make the routing
decision.

The assignment of a sequence to an MSH should be done at the time the
intermediary first becomes aware of a new sequence being set up. With
WS-ReliableMessaging, this happens when the intermediary observes a
CreateSequence message and the corresponding CreateSequenceResponse
message flowing through. At this point the sequence is established and
the intermediary should set the destination MSH and effectively freeze
it for the sequence. (There may be some more options for
intermediaries other than "the last").  The purpose of an ebMS3
intermediary (or other router with some intelligence) would be to be
able to inspect the ebXML message header to set this destination.
With ebMS 2.0, this is perfectly possible, as the MessageOrder element
is an element in a regular ebMS message that also contains From and To
PartyIds, Service, Action and ConversationId.  WS-Reliability also
supports this.  A second disappointment with WS-ReliableMessaging: the
CreateSequence message is a stand-alone message that occupies the SOAP
body and that is to be sent before the first real, meaningful message
in the sequence is sent. So the intermediary has no information to
base any intelligent routing decisions on.

A solution could be to piggy-back ebMS information with the message
that carries the CreateSequence structure.  If this ebMS information
is a full UserMessage, to allow it to carry all user message
information that a router might want to use, can we risk piggy-backing
it on the CreateSequence message that itself is non-reliable? What
does this message look like?  If it uses the default Service for
testing, what if the intermediary wants to know the intended
meaningful business Service to make a routing decision?

An alternative would be to have two reliability chains (up to the
Intermediary for incoming messages, and from the Intermediary for
forwarded messages) and some way to tie them.  Could we define "Ack on
Delivery" for an Intermediary as: "Ack on successful forward", meaning
that intermediate SOAP nodes in the SOAP path do not send their
acknowledgments until they have delivery confirmation from the next
node (which, if it behaves the same, would also wait, meaning no
intermediary ACKs until the final MSH has ACKed).  If I read 8.2.3 of
ebMS 3.0, it seems to indicate WS-ReliableMessaging does not support
"Ack on Delivery", so "Ack on Forward" probably won't work either ..
 
Perhaps multiple separate but connected reliability chains do provide
enough overall robustness and the end-to-end acknowledgment should
rely on something like an ebBP ReceiptAcknowledgment instead ..




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]