Reliable Messaging in WSIT Milestone 2
Other than the usual bug fixes and minor adjustments needed to adapt to changes between WCF versions,
the new work for the milestone consists of implementing some configuration settings that may
affect performance. First some background:
The WS-RM spec defines a SOAP-based protocol used by middleware components that exchange messages called
the sender and receiver. It defines a way for a sender of to ask the receiver
which messages have arrived and a way for the receiver to answer. The specification says little about how to
use the protocol. Of course, the main use is that it allows the sender to ensure that all messages have arrived by
periodically asking the receiver which ones have been delivered and resending the ones that haven't.
A few variables affect the efficiency and performance of a system that does this. Namely how often the sender asks
the receiver to account for the received messages and how often the sender resends the un-accounted-for messages.
Imagine a scenario where almost no messages are lost. "Correct" values for these variables depend very much on the
frequency of lost messages and the length of time it takes to deliver a message. We are exposing these variables
as configuration settings, so end-users will be able to adjust them.
The configurations are client configurations, unlike the other RM configurations that only affect the endpoint. As of
Milestone 2, the settings are not exposed in the Netbeans UI, but it is possible to try them by manually editing the
configuration files. Each setting uses a proprietary PolicyAssertion. They are:
where sun==http://sun.com/2006/03/rm. The namespace will change in the next release.
By default, retries happen every 2000 ms. The Resend setting in the Policy assertion will be used if it is larger
than 2000, unless the system detects an abnormal build-up of unacknowledged messages, in which it will revert
to the default value.
By default the client requests acknowledgements on every application message. If a positive value is specified for
AckRequestInterval in the policy assertion, the system will always wait for that interval between requests for
acknowledgements, unless the system detects an abnormal build-up of unacknowledged messages, in which case it will
refert to the default behavior.
As of Milestone 2, the settings are not exposed in the Netbeans UI. However it is possible to experiment with the
settings by manually adding them to the PolicyAssertion for an endpoint's wsdl:binding. Obviously, this is a
temporary arrangement, since the settings ultimately need to be part of the client's configuration. However, at the
moment, a client will use these settings if it finds them in the WSDL for the endpoint it is communicating with.