Apache camel apachecamel与负载平衡

Apache camel apachecamel与负载平衡,apache-camel,cluster-computing,load-balancing,producer-consumer,Apache Camel,Cluster Computing,Load Balancing,Producer Consumer,我们计划使用Camel在一些外部系统(FTP、SOAP-WS、REST-WS、主题、队列等)之间进行集成 我们可能会使用Spring配置(驼峰上下文XML),因为信息量很大,我们计划将其部署到Tomcat集群 我没有发现任何文档,如果它是一个可能的配置,如果两个应用程序(让我们说它是两个tomcat的开始)都可以干扰 更新 在使用Camel三年之后,它似乎在某些情况下得到了很好的管理:“JMS”和Web服务,负载平衡在这些情况下工作得很好,但是在“JMS”的情况下,如果我们不使用头JMSXGro

我们计划使用Camel在一些外部系统(FTP、SOAP-WS、REST-WS、主题、队列等)之间进行集成

我们可能会使用Spring配置(驼峰上下文XML),因为信息量很大,我们计划将其部署到Tomcat集群

我没有发现任何文档,如果它是一个可能的配置,如果两个应用程序(让我们说它是两个tomcat的开始)都可以干扰

更新

在使用Camel三年之后,它似乎在某些情况下得到了很好的管理:“JMS”和Web服务,负载平衡在这些情况下工作得很好,但是在“JMS”的情况下,如果我们不使用头
JMSXGroupID
,我们就会失去消息的顺序


然而,对于使用文件(或FTP、sFTP、FTPS)的服务,这个问题仍然存在。目前,我们只激活一个分支来使用这个源,如果分支掉了,不幸的是,在第二个分支中没有自动启动路由来使用FTP文件

只要不写HTTP会话,就不必关心任何事情——只需在负载平衡器后面放置一些Tomcat节点即可。如果您写入HTTP会话,这仍然很简单,但您可能已经(根据所选的配置)配置了会话复制

我一直在两个类似的系统集成项目中工作,工作负载很重。作为部署环境,我们选择了位于Apache服务器(通过AJP连接器进行通信)和BigIP loadbalancer(一段时间后我们切换到Nginx)后面的集群Tomcat实例

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

我们已经做了很多测试,最终得到了经过战斗验证的DeltaManager、无粘性会话和同步复制模式。这是一个你需要仔细考虑的问题,这取决于你的系统架构,但是有一个可以帮助。
我们没有使用粘性会话,因为每个请求都有大量的处理需要完成。根据我们所做的测试和请求的性质,对于我们来说,最好是循环处理,而不是针对特定的客户机会话再次访问同一台服务器。另外,由于没有启用粘性会话,我们使用同步复制来确保所有节点在响应传递到客户端之前都接收到完整的会话(它只阻止单个请求,因此不必担心)。我们没有在会话中存储大量对象(只是一些基本信息),因此默认情况下会话会复制到所有节点,这一点没有问题。但是,如果您发现这是一个瓶颈,您可以优化配置,将一些节点子集放入集群。

我认为即使没有传入请求(http),也必须构建两个节点,以便如果它们“使用”相同的源(文件系统,DB),我们必须实现一些锁定机制,否则,两个节点使用相同“事件”的风险很大。我想知道Camel内部是否有一个内置的机制考虑到了这一点。对不起,我没有理解你问题中的ftp选项。正如前面所述,基于HTTP协议的通信(REST、SOAP)没有问题(使用负载平衡器)。对于拾取文件的工作,我不知道任何现成的解决方案。不仅在Camel中,而且在Spring集成或Spring批处理中。我认为您需要自己创建producer,并使用集群实例作为消费者,例如通过JMS队列向他们传递消息。