我将URL列表存储在Apache骆驼标头中,下面是代码,
List<String> supplierHotelRefs = new ArrayList();
supplierHotelRefs.add("a.com");
supplierHotelRefs.add("b.com");
supplierHotelRefs.add("c.com");
exchange.getIn().setBody(supplierHotelRefs);
现在,我需要遍历标题中存在的这个列表并调用url。这应该是并行活动。我尝试了split(..),如果我们将列表存储在主体中,它会很好地工作,但是由于某些限制,我无法将其存储在主体中。如果我获得代码来迭代和并行处理Camel标头中的集合,这将很有帮助。
关于, 拉加万
答案 0 :(得分:1)
您可以将列表设置在标题中,然后在该标题上拆分。
exchange.getIn().setHeader("supplierHotelRefs",supplierHotelRefs);
在路由定义中,您可以基于header属性拆分并并行处理它们。
from("").....
//split based on the header
split(header("supplierHotelRefs"))
//process every split exchange parallely
.parallelProcessing()
//end split block
.end()
//continue route definition after split
.log("completed split processing")
请注意,调用方线程仍将等待所有拆分消息完成。
答案 1 :(得分:0)
您可以使用收件人列表EIP ,请参阅http://camel.apache.org/recipient-list.html
您必须创建一个包含所有收件人的列表,并将该列表存储到标题中。我在您的代码中观察到,您没有将该列表设置为标题,而是将其作为正文。您必须执行
之类的操作List<String> supplierHotelRefs = new ArrayList();
supplierHotelRefs.add("http4://a.com");
supplierHotelRefs.add("http4://b.com");
supplierHotelRefs.add("http4://c.com");
exchange.getIn().setHeader("yourHeaderName", supplierHotelRefs);
您会注意到列表的每个元素都有一个有效的URL,即 http4 Camel组件。该组件用于进行http调用。您可以在列表中添加任何想要的内容(其他骆驼的组件)。
然后,使用收件人列表EIP,告诉所有收件人都已进入先前创建的标头中。 parallelProcessing = true,并行调用列表中的所有项目。这就是在XML DSL中调用的方式:
<recipientList parallelProcessing="true">
<header>yourHeaderName</header>
</recipientList>
或在Java DSL中:
from("...")
...
.recipientList(header("yourHeaderName"));