Message Sessions Example
Service Bus queues and subscriptions provide support for
requiring sessions when receiving messages. Sessions are useful in a number of
scenarios where a group of messages are to be grouped together, such as all the
items in an order, or when a large document has been split into smaller
messages. Sessions are especially useful when an application has load balanced
receivers as they ensure that all messages in the same session are received by
the same instance of the receiving application.
In order to work with sessions the queue or subscription
must be created with the RequiresSession property set to true. Messages sent to
the queues and topics that contain session aware subscriptions must have a
value set for their SessionId properties. When receiving messages from session
aware queues and subscriptions a MessageSession must be used instead of a
QueueClient or SubscriptionClient.
The example used in this scenario will be based on the RFID
processing solution that was used in the duplicate messaging scenario. The
scenario was based on an RFID tag reader that would read the RFID tags for
products in an order and send them, via a queue, to a check out application.
The scenario worked well in that duplicate detection was used to suppress any
duplicate RFID tag messages.
There is, however, a major flaw in the implementation. If
the RFID tags for more than one order are read at the same time the checkout
application is unable to determine which tag reads came from which order, and
will be merged onto a single order. It is also not possible to load-balance the
checkout applications, as items from the different orders will be received by
different instances of the application.
This can be seen if the application is tested with three tag
reader consoles sending orders to checkout console.
When all three tag reader consoles send orders
simultaneously the following results are displayed in the checkout console.
The tag-read messages sent by the three console applications
have all been aggregated into one bill for the customer.
In order for the solution to ensure that the tag-read
messages from a single are processed as one batch or sequence rather than
individual messages, the solution must be modified to use message sessions.