Мой вопрос здесь заключается в том, чтобы узнать, как я могу справиться с нагрузкой на сервер, если очередь jms (Wildfly 10) заполняется с высокой степенью заполнения.Проблема в том, что сообщения постоянно добавляются в очередь JMS, но они обрабатываются по одному. Написанная логика заключается в обработке сообщений одно за другим. Мы не можем обрабатывать несколько сообщений за раз, то есть логику нельзя изменить.Но это приводит к увеличению нагрузки на сервер, так как очередь загружается многими сообщениями.Как я могу управлять очередью на этом этапе.
Вот пример кода, который я использую для производства и потребления: -
Следующий код проходит по расписанию каждые 100 миллисекунд и получает 100 сообщений избазу данных и отправить в очередь.
Arraylist arrMessages = GetMessagesFromdatabase ();
для (MessageObject obj: arrMessages) sendMessagetoQueue (obj);
Код производителя: -
void sendMessagetoQueue(MessageObject messageObject){
ConnectionFactory connectionFactory = JMSConstants.getConnFactory.getJmsConnectionFactory();
Context initialContext = JMSConstants.getConnFactory.getInitialcontext();
Connection connection = null;
String destinationName = "java:/jms/queue/Queue";
MessageProducer publisher = null;
Session session = null;
try {
connection = connectionFactory.createConnection();
Queue queue = (Queue) initialContext
.lookup(destinationName);
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
publisher = session.createProducer(queue);
connection.start();
ObjectMessage objMessage = session.createObjectMessage(messageObject);
publisher.send(objMessage);
} catch (Exception exc) {
exc.printStackTrace();
LOG.error(exc);
}
}
Затем каждые 100 миллисекунд запускается другое расписание, которое получает сообщение из очереди и пересылает его для обработки по одному.
Код потребителя: -
ConnectionFactory connectionFactory = JMSConstants.getConnFactory.getJmsConnectionFactory();
Context initialContext = JMSConstants.getConnFactory.getInitialcontext();
Connection connection = null;
String destinationName = "java:/jms/queue/Queue";
Session session = null;
MessageConsumer consumer = null;
Boolean checkFlag = true;
QueueBrowser queueBrowserconnect = null;
try {
connection = connectionFactory.createConnection();
Queue queue = (Queue) initialContext.lookup(destinationName);
session = connection.createSession();
consumer = session.createConsumer(queue);
Queue senderqueueconnect = (Queue) initialContext.lookup(senderQueueconnect);
queueBrowserconnect = session.createBrowser(senderqueueconnect);
connection.start();
ObjectMessage objectMessage = (ObjectMessage) consumer.receive(1);
if (objectMessage != null) {
objectMessage.acknowledge();
MessageObject messageobject= (MessageObject) objectMessage.getObject();
//Send object for processing
messageService.processInputFromQueue(messageobject);
}
} catch (Exception exc) {
exc.printStackTrace();
LOG.error(exc.getMessage());
}