在多个tomcat服务器之间拆分一个请求以从Cassandra DB获取数据

时间:2015-04-15 16:07:59

标签: java spring tomcat cassandra

我们在环境中运行了6个tomcat服务器,并在每个服务器上部署了我的应用程序war。在当前场景中,我使用分页从cassandra获取所需数据。假设DB中有10,000条记录,它将首先获取1-1000个下一组数据。重要的一点是它只使用一个tomcat服务器,因为这是一个请求,因为等待时间更长。

现在,我想将这个请求分成6个不同的tomcat服务器,例如,第一个tomcat将获取1-1000行,然后从1001-2000获取第二个,依此类推。然后将所有响应汇总到单个响应。那么,Camel是否有任何方法使用spring DSL来跨多个tomcat服务器发送单路径请求,这样我就可以利用所有服务器来提升性能。感谢您的宝贵意见。感谢。

2 个答案:

答案 0 :(得分:0)

不幸的是,无法一次在不同偏移量的单个分区内分页。 The protocol spec定义从每个查询返回的分页状态。然后使用该分页状态来检索下一页行。分页状态被认为是内部的,不应该被操纵。在java-driver 2.0.10 / 2.1.6中,有一种机制可以在语句(JAVA-550)上设置分页状态,但它非常严格,因为分页状态必须从原始查询派生,所以您可以保留该状态以供日后使用,并在其他时间继续查询。

但是,如果您正在进行范围查询(我怀疑您有很多行),一个选项是datastax spark connector,它有一种机制可以将范围查询分解为令牌范围并委派查询通过令牌范围到提交给spark worker的任务。如果你能以某种方式在每个tomcat实例中运行一个spark worker,那么这可能是一个选择。

答案 1 :(得分:0)

您可以将splitter EIP与聚合策略结合使用。后者可用于将来自子消息的回复组合成来自Splitter的单个传出消息。您可能还想查看此Camel Cassandra组件,因为它非常灵活且功能强大。