【问题标题】:Apache Camel Architecture阿帕奇骆驼架构
【发布时间】: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


【解决方案1】:

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

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

  1. 同步 http 请求
  2. 将消息放在 MQ 上并回复标头
  3. 消息被提取并发送到后端
  4. 如果在给定时间内未收到回复,则交易终止。
  5. 对队列的回复被删除
  6. 通知请求者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2013-02-09
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多