Hi!
I have a P2P architecture where clients send messages to a JMS server and
they are expecting for a reply. I have seen two solutions for implemementing
this:
1. The client has a predefined reply queue where it expects the reply
messages from the server.
2. The client has a temporary queue it expects the reply messages from the
server.
I have implemented the solution 1 and I've noticed this drawback:
If the client is shutdown and the server didn't send all reply messages for
it, next time when the client is connected the server will send the unsent
messages eventhough the server is set up do not keep a journal.
The question is how can I consume or discard the unsent messages in order to
have the reply queue empty for the next connection of the client? How can I
know when the client is shutdown (is not connected anymore to the server)?
For the soution 2 I've noticed the following:
The drawback that appears in solution 1 does't appear in this soultion,
meaning when the client is shutdown and it reconnects to the server it will
not receive the remained unsent messages.
A major drawback appears: you should create per each message the producer
that il will send the message by using somehow this code:
(supposing that the received message from the server is msg and the
producer for the replying is named replyProducer and the setup for connection,
session are done it)
public void onMessage(Message msg) {
...
replyProducer = session.createProducer(msg.getJMSReplyTo());
...
This approach has a huge impact on the server memory when you send a
high volume of messages even when you have just one user who is connected.
I have made a producers pool as I described for the solution one but it has
a setback: each time the client is connected to the server I retain the
destionation and the producer in the pool and each time is different because I
use temporary queue. The producers pool is a synchronized hasmap that has as a
key the destination of the for the repply message and its producer. The
problem can be solved again if I can test if the client is still connected or
no, thus I can free up the producer pool for unactive clients.
Any suggestions and ideas regarding this issues are well appreciated.
Thank you,
Florin
---------------------------------
All new Yahoo! Mail "The new Interface is stunning in its simplicity and ease
of use." - PC Magazine