2016-01-03 173 views
1

我正在为我的公司开发新的Web服务原型,我们正在考虑Apache Camel作为我们的集成框架。这里是高层建筑的快速破败:Apache Camel架构

-IBM WebSphere MQ作为排队的解决方案

1)我们收到的http请求

2)异步坚持这一要求

图3a)做所述请求一些处理

3B)发送到另一个层用于进一步处理

4)异步更新DB

5的请求记录)回应呼叫者

我想要做的是:

当一个HTTP请求时,把它放在要处理的队列,等待n秒。如果网络处理程序在n秒内没有得到响应,请使用自定义消息回复调用者 一旦请求在处理队列中,骆驼路由正在侦听此队列进行处理。当它从队列中提取消息时,将请求的副本放在不同的队列中以异步持久化。对请求做一些处理。然后将其发送到另一个队列以进一步处理并等待响应。然后将其放回持久队列以异步更新。 然后回应网络监听器。然后网络监听器响应网页调用者。

我正在阅读关于Apache Camel的所有信息,并且有关于此的大量信息。我可能会在信息过载的一点点,并在下面的担忧任何帮助,将不胜感激:

1) 如果Web侦听器使用没有的replyTo队列一个INOUT交换(与第一处理层)定义它会为响应创建一个临时队列。如果这个请求超时会发生什么?我知道我可以在交易所设置requestTimeout,如果超时,可以捕获该异常并设置自定义消息。但是,这个临时队列会被杀死吗?或者随着时间的推移,它们会随着时间的推移而增加?

2) 当涉及到扩展处理层(在不同机器上添加更多相同路由的实例)时,通常情况下,如果提取响应的实例(使用固定的队列答复)是不同的而不是提取请求的实例,所有关于原始请求的信息都在消息中,因此不需要跨实例共享数据(除非共享数据(例如聚合等)。

当构建这样的系统时,任何其他技巧和窍门都会非常有帮助。

谢谢!

+1

您是在请求/回复场景中工作还是将对调用者的响应发送到另一个URI? –

+1

用于启动http请求,即req/reply ...尽管如此,会有一些异步请求没有回复,有些请求/回复使用临时/固定回复队列 – A2345sooted

回答

1

我想说这个解决方案太复杂了,太多的领域在维护和复杂性方面都很难。混合异步和同步通信的步骤太多。

为什么不能简单地解决以下步骤:

  1. 的同期http请求
  2. 上MQ
  3. Put消息与回复到标题
  4. 消息被拾取并传送到后端
  5. 如果答复在给定时间内没有收到交易终止。
  6. 对队列的回复被删除
  7. 请求者被通知。