Apache camel - EIP设计查询

时间:2017-11-13 20:44:48

标签: apache-camel jms jbossfuse enterprise-integration

我有一个与EIP设计相关的查询。我需要按块处理csv文件并调用Rest API。完成整个文件的处理后,我需要调用另一个Rest API告诉处理完成。我想要路由为了进行交易,所以我在两者之间排队,如果终端系统不可用,重试将在经纪人级别进行。

我的流程如下。 第一流程: csv文件 - >拆分100个记录的块 - >将消息放入队列

第二个流程(交易路线): 从队列中选择消息 - >调用其余的API

第二个流是交易的。因为iam打破了流量,它是异步的,我不知道如何调用完成调用。我没有持久存储到每个块处理的状态。

无论如何我可以使用JMS功能或Camel来实现它吗?

1 个答案:

答案 0 :(得分:0)

您可以使用的第一个流程是Camel Splitter EIP:
http://camel.apache.org/splitter.html

仔细查看文档,您会发现每个拆分交换有三种交换属性:

  • CamelSplitIndex:拆分计数器,每个Exchange被拆分时会增加。计数器从0开始。
  • CamelSplitSize:已拆分的Exchange总数。此标头不适用于基于流的拆分。从Camel 2.9开始,此标头也在基于流的分割中设置,但仅在已完成的Exchange上设置。
  • CamelSplitComplete:此Exchange是否是最后一个。

由于它们是交换属性,因此在将消息发送到队列之前,应将它们放到JMS头中。但是,您应该能够在第二个流程中使用这些信息,这样您就可以知道哪个是最后一条消息。

但请记住,它都是异步的,因此CamelSplitComplete标志不一定意味着第二个流的最后一条消息。您可以创建一个有状态计数器或利用Resequencer EIP http://camel.apache.org/resequencer.html来处理异步性。