我的想法是使用camel来解耦模块。为了支持可伸缩性和故障转移,我想知道是否建议使用以下架构?
我有两个使用Camel嵌入式AppCamel1和AppCamel2的应用程序。然后我有独立的骆驼节点Camel1和Camel2。
AppCamel1将具有对Camel1和Camel2进行故障转移/负载平衡的路由。这样,如果Camel1崩溃,例如,Camel2用于故障转移。
Camel1和2将使用http组件进行REST调用。此外,还会有来自AppCamel1的请求回复,最高可达camel1或2。
这是一个有效的场景吗?
我应该使用什么来互连不同的Camel实例(AppCamel1到Camel1或2)? (我想知道是否可以避免像中间的jms服务器这样的其他组件)
谢谢!
按照Boday的回答编辑
REST调用来自Camel1 / 2。我想将AppCamel1 / 2与Camel1 / 2互连,看看我是否可以避免介于两者之间。我猜mina是一种可能性甚至是http,但在这种情况下,AppCamel1和AppCamel2需要知道Camel1 / 2哪个不太好。
答案 0 :(得分:1)
如果您尝试将HTTP请求平衡到AppCamel1 / 2,那么您需要一个代理服务器(apache mod_proxy,perlbal等)。要从AppCamel1 / 2加载到Camel1 / 2的余额,您可以使用Camel的load balancer甚至JMS请求/回复......
从AppCamel1 / 2到Camel1 / 2,听起来好像是在使用REST作为界面。如果您需要在实例之间进行更复杂的通信,那么我将使用JMS(通过camel-activemq)进行消息传递,使用Hazelcast(通过camel-hazelcast)进行分布式缓存/锁定等。
答案 1 :(得分:1)
如果使用jms进行通信,则不需要特殊的负载均衡器。只需使用一个队列,让Camel1 / 2监听队列。然后他们将自动进行故障转移和负载平衡。
答案 2 :(得分:1)
我绝对会选择jms中间件。 Activemq是自然选择(骆驼甚至被认为是activemq的子项目)。将amq与您的canel实例一起嵌入并将它们聚类是微不足道的。然后,Activemq将能够为您处理负载平衡和故障转移。
答案 3 :(得分:1)
这也在Camel邮件列表中进行了讨论,其中也有一些指示和建议 http://camel.465427.n5.nabble.com/scalable-bus-with-multiple-Camel-instances-tp5606593p5606593.html