Sub-queueing for optimal Java* Message Service non-durable publish/subscribe client/server performance
Original Publication Date: 2002-May-16
Included in the Prior Art Database: 2003-Jun-21
In a traditional 'pull model' publish/subscribe messaging system all messages are typically stored on a central server, when the client 'pulls' a message the request is sent to the server who removes the message from the store and sends the message to the client. This involves a flow from the client to the server (the request) and a second flow from the server to the client (the reply) for every message pulled. In a Java Message Service (JMS) non-durable publish subscribe environment it is possible to identify messages which can only be consumed at a particular destination during the lifetime of a particular consumer. In this environment it is possible to queue these messages for later delivery to a consumer in non persistent storage at the consumer location rather than on the central server. In the case where the consumer is remote from the server this allows greater freedom of choice in the protocol used to reliably transfer messages to the client. Using this method the server can send qualifiying messages directly on to the client as they arrive, when the messages arrive in the client they are queued locally in non persistent storage. When the client 'pulls' a message then the pull request may be satisfied from the local store, otherwise a request can be sent to the server in the previous fashion. Hence using this method it is possible for each pull to involve only a single flow, rather than the two flows in the traditional case. Furthermore it is possible for the server to send the client multiple logical messages in a single flow, thus further reducing the number of flows required.