2015-08-27 61 views
1

我的服务器中有两个应用程序,并通过ActiveMQ使用JMS在两者之间发送消息。我的两个应用程序如下所示:JMS队列 - 在发送和接收对象消息之间暂停10秒

Web服务 - 接受HTTP请求,验证,然后发送要由其他应用程序执行的消息。执行应用程序 - 接受对象消息,执行命令,将执行报告发送回Web服务以呈现给客户端。

My Exec应用程序在200毫秒内接收来自Web服务的消息,在那里没有问题。但是,当我发送执行报告时,消息可以在队列中挂起超过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秒,直到最后我得到”传入...“

这可能是什么原因造成的?

+0

是你使用某种调度的activeMQ吗? – Vihar

回答

0

确保您有足够的MDB在Exec App上运行,以便他们可以处理负载。