在 apache camel 中同时发送两个以上的请求 ActiveMQ 队列然后它无法响应
Concurrently sending more than two request ActiveMQ queue in apache camel then it fails to respond
客户端请求:
public Message receive(String message, String queueName) {
String text = null;
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://10.0.0.0: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;
}
服务器端:
public void configure() throws Exception {
from("activemq:queue:GET_QUEUE?disableReplyTo=true")
.setExchangePattern(ExchangePattern.InOut)
.to("freemarker:Response.ftl")
.inOnly("activemq:queue:GET_QUEUE");
}
以下我已经尝试过的东西没有得到结果
1)activemq:queue:GET_QUEUE?disableReplyTo=true&concurrentConsumers=5
2)activemq:queue:GET_QUEUE?disableReplyTo=true&concurrentConsumers=1&maxConcurrentConsumers=5
3)activemq:queue:GET_QUEUE?disableReplyTo=true&useMessageIDAsCorrelationID=true&concurrentConsumers=5
4)activemq:queue:GET_QUEUE?disableReplyTo=true&useMessageIDAsCorrelationID=true&concurrentConsumers=5&asyncConsumer=true
您在 Camel 中禁用了不应该做的 replyTo,然后删除最后一个 inOnly,因为 Camel 会在路由完成后自动将消息发送回回复队列。
客户端请求:
public Message receive(String message, String queueName) {
String text = null;
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://10.0.0.0: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;
}
服务器端:
public void configure() throws Exception {
from("activemq:queue:GET_QUEUE?disableReplyTo=true")
.setExchangePattern(ExchangePattern.InOut)
.to("freemarker:Response.ftl")
.inOnly("activemq:queue:GET_QUEUE");
}
以下我已经尝试过的东西没有得到结果 1)activemq:queue:GET_QUEUE?disableReplyTo=true&concurrentConsumers=5
2)activemq:queue:GET_QUEUE?disableReplyTo=true&concurrentConsumers=1&maxConcurrentConsumers=5
3)activemq:queue:GET_QUEUE?disableReplyTo=true&useMessageIDAsCorrelationID=true&concurrentConsumers=5
4)activemq:queue:GET_QUEUE?disableReplyTo=true&useMessageIDAsCorrelationID=true&concurrentConsumers=5&asyncConsumer=true
您在 Camel 中禁用了不应该做的 replyTo,然后删除最后一个 inOnly,因为 Camel 会在路由完成后自动将消息发送回回复队列。