Lets say Producer sends a message to the JMS Topic "news". Consumer1 reads the message, but Consumer2 is offline so he hasn't read the message yet.
Is there any build-in (to the spec or impl) way for the Producer to be notified that Consumer1 has read his message, but Consumer2 has not? This would, in fact, mirror the Read Notification of an email.
Clearly you could implement this by having each Consumer send an acknowledgement, but I'm looking for something already a part of JMS or a JMS system.
The JMS FAQ says
JMS API messaging provides guaranteed
delivery via the once-and-only-once
delivery semantics of PERSISTENT
messages. In addition, message
consumers can insure reliable
processing of messages by using either
CLIENT_ACKNOWLEDGE mode or transacted
sessions. This achieves reliable
delivery with minimum synchronization
and is the enterprise messaging model
most vendors and developers prefer.
The JMS API does not define a schema
of systems messages (such as delivery
notifications). If an application
requires acknowledgment of message
receipt, it can define an
application-level acknowledgment
message.
These issues are more clearly
understood when they are examined in
the context of publish/subscribe
applications. In this context,
synchronous delivery and/or system
acknowledgment of receipt are not an
effective mechanism for implementing
reliable applications (because
producers by definition are not, and
do not want to be, responsible for
end-to-end message delivery).
I'm no expert, but I think this is saying that the spec doesn't define a way for a consumer to confirm receipt to a producer, by design. I don't know of any implementations that do - and if they did, it looks like it'd be a big departure from the model the spec captures.