我已经公开了一个休息端点,并希望按照以下步骤处理下达请求:
- 从休息电话中获取消息
- 验证邮件(
restRequestValidationProcessor
)- 向来电应用程序发送确认响应(使用
的其余来电发起人)bean:restCallResponserService
- 将原始消息发送给mq进行处理(
ref:mqueueEndpoint
)- 一旦msg进入mq,另一条路由就会触发msg处理。
醇>
目前正在尝试以下方式:
<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。
有人可以建议如何实现吗?
答案 0 :(得分:0)
由于路由也并行运行,因此无法确保客户端在消息处理开始或完成之前会有响应。
generateSuccessResponse需要进行调查,以便及时回复。记录方法中开始和结束的时间,看看那里的延迟在哪里。