Universal Messaging provides the ability for both asynchronous and synchronous consumers to be durable. Durable consumers allow state to be kept at the server with regard to what events have been consumed by a specific consumer of data.
Universal Messaging supports durable consumers through use of Universal Messaging named objects. When a subscription is created using a named object, the server will ensure that the named object current position is maintained. As named object subscriptions are restarted, say after application restart, the server will begin delivering events from the last event which was successfully acknowledged by the client.
There are different ways in which events consumed by named consumers can be acknowledged. By specifying that 'auto acknowledge' is true when constructing either the synchronous or asynchronous consumers, then each event is acknowledged as consumed automatically. If 'auto acknowledge' is set to false, then each event consumed has to be acknowledged by calling the ack() method on the nConsumeEvent.