23.9. 使用基于 Infinispan 的聚合存储库
在本节中,我们将使用基于 Infinispan 的聚合存储库。
Java 示例
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration(); (1) conf.setHosts("localhost:1122") InfinispanRemoteAggregationRepository repo = new InfinispanRemoteAggregationRepository(); (2) repo.setCacheName("aggregation"); repo.setConfiguration(conf); context.addRoutes(new RouteBuilder() { @Override public void configure() { from("direct:start") .aggregate(header("MessageID")) .completionSize(3) .aggregationRepository(repo) (3) .aggregationStrategyRef("myStrategy") .to("mock:result"); } });
其中,
- 1 - 配置缓存
- 2 - 创建仓库 bean
- 3 - 将存储库设置为路由
XML 示例
<bean id="infinispanRepo" class="org.apache.camel.component.infinispan.remote.InfinispanRemoteAggregationRepository" destroy-method="stop"> <constructor-arg value="aggregation"/> (1) <property name="configuration"> (2) <bean class="org.apache.camel.component.infinispan.remote.InfinispanRemoteConfiguration"> <property name="hosts" value="localhost:11222"/> </bean> </property> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start" /> <aggregate strategyRef="myStrategy" completionSize="3" aggregationRepositoryRef="infinispanRepo"> (3) <correlationExpression> <header>MessageID</header> </correlationExpression> <to uri="mock:result"/> </aggregate> </route> </camelContext>
其中,
- 1 - 设置仓库将使用的缓存名称
- 2 - 配置存储库 bean
- 3 - 将存储库设置为路由
注意
随着 Infinispan 11 的发布,需要在创建的任何缓存上设置编码配置。这对消耗事件非常关键。如需更多信息,请参阅官方 Infinispan 文档中的 DataEncoding 和 MediaTypes。