I use ActiveMQ to simulate server congestion in Java. And basically it's fine, but when I get more than 600 requests, the thing just goes WTF!
I think the bottleneck is my main server, which this guy is. I am already reusing the connection and creating various sessions to consume messages from clients. As I said, I use about 50-70 sessions per connection, reuse the connection and the queue. Any idea that I can reuse / optimize my components / listener below?
The architecture is as follows:
* = various
Client ---> JMS MasterQueue ---> * Master ---> JMS SlavaQueue ---> * SlaveQueue
Basically I create a Temp queue for each Master → Slave communication session, is this a big performance issue?
public class ReceiveRequests implements MessageListener {
public void onMessage(Message msg) {
try {
ObjectMessage objMsg = (ObjectMessage) msg;
Destination originReplyDestination = objMsg.getJMSReplyTo();
BankQueue slaveQueue = getSlaveQueue();
QueueSession session = slaveQueue.getQueueConnection()
.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session
.createSender(slaveQueue.getQueue());
TemporaryQueue tempDest = session.createTemporaryQueue();
MessageConsumer masterConsumer = session
.createConsumer(tempDest);
msg.setJMSReplyTo(tempDest);
sender.send(msg);
Message msgReturned = masterConsumer.receive(getTimeout());
while (msgReturned == null) {
sender.send(msg);
msgReturned = masterConsumer.receive(getTimeout());
}
MessageProducer producerToClient = session
.createProducer(originReplyDestination);
producerToClient.send(originReplyDestination, msgReturned);
} catch (JMSException e) {
logger.error("NO REPLY DESTINATION PROVIDED", e);
}
}
}
source
share