Попытка отправить несколько запросов в один и тот же момент на маршрут camel activemq, один запрос обслуживается, а другой запрос не обслуживается и не отправляется обратно, как есть. Сообщения JMS устанавливаются с JMScorrelationId тоже перед отправкой, как показано ниже нижеОшибка параллелизма Activemq в маршруте верблюда Apache
textMessage.setJMSCorrelationID(UUID.randomUUID().toString());
мой ActiveMQ маршрут
from("activemq:queue:TEST_QUEUE?disableReplyTo=true")
.setExchangePattern(ExchangePattern.InOut)
.process(new Processor() {
public void process(Exchange e) throws Exception {
log.info("Request : "
+ MessageHelper.extractBodyAsString(e.getIn()));
/*Processing Logic*/
}
})
.beanRef("testBean","postDetails")
.inOnly("activemq:queue:TEST_QUEUE");
Multiple (Test 2 запросов) запросы, посланные к вышеуказанному маршруту одновременно не обслуживал, кроме одного. Servicemix.log показывает все полученные запросы. Но обслуживается только один.
Ниже приведен код, который отправляет запрос, развернутый в jboss 6.1, как часть веб-приложения.
public Message receive(String message, String queueName) {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://localhost:61616");
String userName = "smx";
String password = "smx";
Connection connection;
Message response =null;
try {
connection = connectionFactory.createConnection(userName, password);
connection.start();
((ActiveMQConnectionFactory) connectionFactory)
.setDispatchAsync(false);
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue destination = session.createQueue(queueName);
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage textMessage = session.createTextMessage(message);
Queue tempQueue = session.createQueue(queueName);
textMessage.setJMSReplyTo(tempQueue);
producer.send(textMessage);
MessageConsumer consumer = session.createConsumer(tempQueue);
response = consumer.receive();
response.acknowledge();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
return response;
}
Есть ли какой-либо параметр, который отсутствует? пожалуйста, предложите.
Точно как вы отправляете запросы одновременно? Вы собираете сообщения из очереди. В любой момент времени в передней части очереди есть только одно сообщение. –
Приложение, развернутое в одной системе. Доступ к этому веб-приложению осуществляется с помощью IP-адреса двумя разными системами. Эти две системы отправляют запросы одновременно. –
Да, но есть еще одно сообщение за один раз, чтобы попасть в очередь TEST_QUEUE, где маршрут берет сообщение. Кроме того, когда вы начинаете, пробуйте все. Сначала проверьте его на одну систему и убедитесь, что оба они работают. Затем переключитесь на второй и убедитесь, что это работает. Затем проверьте оба. Если все точно так же, то нет причин, по которым он не должен работать. –