Java JMS队列-在发送和接收对象消息之间暂停10秒
我的服务器中有两个应用程序,并通过ActiveMQ使用JMS在这两个应用程序之间发送消息。我的两个应用程序如下 Web服务—接受HTTP请求,验证,然后发送消息以供其他应用程序执行 Exec应用程序-接受对象消息,执行命令,将执行报告发送回web服务,以呈现给客户端 我的Exec应用程序在200毫秒内接收来自Web服务的消息,没有问题。但是,当我发送exec报告时,消息可能会在队列中挂起10秒以上,然后才被web服务接收。我对双方的消费者使用相同的代码,因此我不确定原因是什么 这是我在Exec应用程序中的消息生成器-Java JMS队列-在发送和接收对象消息之间暂停10秒,java,jms,activemq,message-queue,Java,Jms,Activemq,Message Queue,我的服务器中有两个应用程序,并通过ActiveMQ使用JMS在这两个应用程序之间发送消息。我的两个应用程序如下 Web服务—接受HTTP请求,验证,然后发送消息以供其他应用程序执行 Exec应用程序-接受对象消息,执行命令,将执行报告发送回web服务,以呈现给客户端 我的Exec应用程序在200毫秒内接收来自Web服务的消息,没有问题。但是,当我发送exec报告时,消息可能会在队列中挂起10秒以上,然后才被web服务接收。我对双方的消费者使用相同的代码,因此我不确定原因是什么 这是我在Exec应
public void createAndSendExecReport(OrderExecutionReport theReport){
try {
logger.debug("Posting exec report: " +theReport.getOrderId());
this.excChannelMessageProducer.send(createMessage(theReport));
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
[有一个createMessage方法可以将我的POJO转换为对象消息]
MessageListener listener = new MessageListener() {
@Override
public void onMessage(Message message) {
logger.debug("Incoming execution report");
try {
OrderExecutionReport report = (OrderExecutionReport)((ObjectMessage)message).getObject();
consumeExecutionReport(report);
} catch (Exception e) {
logger.error("Message handling failed. Caught: " + e);
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
logger.error(sw.toString());
}
}
};
我收到日志消息“发送执行报告”
然后,web服务中没有任何内容,直到15秒后,我最终得到“传入…”
这可能是什么原因 确保Exec应用程序上有足够的MDB运行,以便它们能够处理负载 确保Exec应用程序上有足够的MDB运行,以便它们能够处理负载 您的activeMQ是否使用某种调度?您的activeMQ是否使用某种调度?