使用rest和MQ

时间:2017-01-07 01:03:07

标签: java rest apache-camel ibm-mq spring-bean

我已经公开了一个休息端点,并希望按照以下步骤处理下达请求:

  
      
  1. 从休息电话中获取消息
  2.   
  3. 验证邮件(restRequestValidationProcessor
  4.   
  5. 向来电应用程序发送确认响应(使用bean:restCallResponserService
  6. 的其余来电发起人)   
  7. 将原始消息发送给mq进行处理(ref:mqueueEndpoint
  8.   
  9. 一旦msg进入mq,另一条路由就会触发msg处理。
  10.   

目前正在尝试以下方式:

<restConfiguration component="servlet" bindingMode="off">
<rest path="/">
 <post uri="/messages" >
 <to uri="direct:handleRestCall" />
 </post>
</rest>

<route>
<from uri="direct:handleRestCall" />
  <process ref="restRequestValidationProcessor" />
    <to uri="ref:mqueueEndpoint" />
    <to uri="bean:restCallResponserService?method=generateSuccessResponse"/>
    <onException>
    <exception>java.lang.Exception</exception>
     <handled>
     <constant>true</constant>
     </handled>
      <process ref="exceptionProcessor"></process>
    </onException>
</route>

<route>
 <from uri="ref:csQueueEndpoint" />
  <process ref="msgProcessor"></process>
</route>

问题是 - 有时候客户端应用程序(soap ui)等待的时间超过了所需的时间。我希望客户端不等待实际的msg处理,但它看起来消息已经开始处理,客户端没有得到确认。在我看来,由于MQ处理是异步的,在队列处理路由(下面的代码段中的第二个路由)之前,restCallResponser (<to uri="bean:restCallResponserService?method=generateSuccessResponse"/>)应该触发,客户端将获得响应,并且后台队列路由将执行..这不会发生使用低于conf。

有人可以建议如何实现吗?

1 个答案:

答案 0 :(得分:0)

由于路由也并行运行,因此无法确保客户端在消息处理开始或完成之前会有响应。

generateSuccessResponse需要进行调查,以便及时回复。记录方法中开始和结束的时间,看看那里的延迟在哪里。