試圖在同一時刻向駱駝activemq路由發送多個請求,一個請求被服務,另一個請求未被服務並按原樣發回。該JMS消息過於發送類似下面下面Apache駝峯路由中的Activemq併發失敗
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");
多(試驗2個請求)發送到上述航線的同時不提供服務,除了一個請求之前設定JMScorrelationId。 servicemix.log顯示所有接收到的請求。但只有一個服務。
下面是在jboss 6.1中作爲Web應用程序的一部分發送請求的代碼。
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;
}
是否有一些或其他參數我失蹤?請建議。
準確地說,您如何同時發送請求?您正在拾取隊列中的消息。在任何給定的時刻,隊列前面只有一條消息。 –
在一個系統中部署了一個應用程序。該Web應用程序可以通過2個不同的系統使用IP地址訪問。這兩個系統一次發送請求。 –
是的,但一次只有一條消息正在隊列TEST_QUEUE中排隊,其中路由選取消息。另外,當你開始時保持簡單。首先用一個系統進行測試,並確保兩者都能正常工作。然後切換到第二個,並確保工作。然後用兩者進行測試。如果一切都完全一樣,那麼沒有理由不應該工作。 –