3

我们计划使用Camel在一些外部系统(FTP,SOAP-WS,REST-WS,主题,队列等)之间进行集成。Apache Camel和负载平衡

我们可能会使用Spring配置(Camel上下文XML),并且由于信息量很大,我们计划将它部署到一个Tomcat集群。

我没有找到任何文件,如果它可能的配置,如果两个应用程序(让我们说它是两个tomcat的开始)可以干预。

UPDATE

使用骆驼三今年则似乎它是很好的某些情况下,托管后:“JMS”和Web服务,负载均衡效果很好在这些情况下,但在以下情况下“ JMS',如果我们不使用标头JMSXGroupID,我们会松开消息的顺序。

但是问题仍然存在于从File(或FTP,sFTP,FTPS)消耗的服务中。目前,我们只激活一条腿从这个源消耗,并在腿下降的情况下,不幸的是没有自动启动第二程中的路线消耗FTP文件。

回答

1

只要您不写入HTTP会话,您不必关心任何事情 - 只需将一些Tomcat节点放在负载均衡器后面即可。如果您写入HTTP会话,这仍然很简单,但您可能(取决于所选的配置)配置会话复制。

我一直在研究两个类似的系统集成项目,在繁重的请求负载下工作。作为一个部署环境,我们选择了站在Apache服务器之后的集群式Tomcat实例(通过AJP连接器进行通信)和BigIP负载均衡器(在我们切换到Nginx之后)。

这两个应用程序都接受了HTTP请求。其中一个是完全无状态的(代理类),另一个必须保留一些特定于会话的信息。对于后者,我们必须确保放入会话中的所有对象都是可序列化的,并配置会话复制。

我们已经做了很多测试,最终以经过战斗验证的DeltaManager,没有粘性会话和同步复制模式结束。根据您的系统架构,这是您需要非常仔细地考虑的问题,但有一个very good documentation可以提供帮助。

我们没有使用粘性会话,因为每个请求都包含大量的处理。根据我们所做的测试和请求的性质,对于我们来说,最好是循环处理,而不是再次针对特定的客户端会话重复同一个服务器。同样因为没有启用粘性会话,所以我们使用同步复制来确保所有节点在将响应传送到客户端之前接收完整会话(它只阻止单个请求,所以不用担心)。我们没有在会话中存储巨大的对象(只是一些重要的信息),所以我们没有问题,默认情况下会话被复制到所有节点。但是,如果您发现它是一个瓶颈,则可以改进配置,将一些子节点放入群集中。

+0

我认为即使没有传入请求(http),两个节点也必须被构建,以便如果它们“消耗”相同的源(文件系统,数据库),我们必须实现一些锁定机制,否则风险的两个节点消耗相同的“事件”是很大的。我想知道骆驼内部是否有内置机制来考虑这一点。 –

+0

对不起 - 我没有在你的问题中找到ftp选项。那么,就像已经提到的基于HTTP协议的通信(REST,SOAP)一样,没有问题(使用负载平衡器)。对于提取文件的工作,我不知道任何开箱即用的解决方案。不仅在骆驼中,而且在Spring集成或Spring批处理中。我认为你需要自己创建生产者,并使用你的集群实例作为消费者通过JMS队列将消息传递给他们。 –