【发布时间】:2016-01-03 23:58:33
【问题描述】:
我正在为我的公司设计一个新的 Web 服务原型,我们正在考虑将 Apache Camel 作为我们的集成框架。以下是高级架构的简要介绍:
-IBM Websphere MQ 作为排队解决方案
1) 我们收到 http 请求
2) 异步持久化这个请求
3a) 对请求做一些处理
3b) 发送到另一层进行进一步处理
4) 异步更新DB中的请求记录
5) 回复调用者
我想做的是:
当一个http请求进来时,把它放到一个待处理的队列中,等待n秒。如果 web 处理程序在 n 秒内没有得到响应,则使用自定义消息回复调用者 一旦请求在处理队列上,骆驼路由就会监听这个队列进行处理。当它从队列中提取消息时,将请求的副本放在不同的队列中以异步保存。对请求进行一些处理。然后将其发送到另一个队列进行进一步处理并等待响应。然后将其放回持久队列以进行异步更新。 然后响应网络监听器。然后网络监听器响应网络调用者。
我正在阅读有关 Apache Camel 的所有信息,并且有很多关于那里的信息。我可能有点信息过载,非常感谢您对以下问题的任何帮助:
1) 如果 Web 侦听器使用 InOut 交换(带有第一个处理层)而没有定义 replyTo 队列,它将为响应创建一个临时队列。如果这个请求超时怎么办?我知道我可以在交换机上设置 requestTimeout,如果超时,捕获该异常并设置自定义消息。但是,那个临时队列会被杀死吗?还是会随着请求超时而逐渐增加?
2) 当涉及到扩展处理层(在不同的机器上添加更多相同路由的实例)时,如果接收响应的实例(使用对队列的固定回复)与接收响应的实例不同,习惯上是这样吗?请求,关于原始请求的所有信息都在消息中,所以不需要跨实例共享数据(当然除非有共享的数据,如聚合等)?
在构建这样的系统时,任何其他提示和技巧都会非常有帮助。
谢谢!
【问题讨论】:
-
您是在请求/回复场景中工作,还是将对调用者的响应发送到另一个 URI?
-
对于发起的 http 请求,即 req/reply... 在后端,会有一些没有回复的异步请求和一些使用临时/固定回复队列的请求/回复
标签: http apache-camel ibm-mq