我使用的是camel 2.18.0版本。我在SEDA流程中使用restlet组件时遇到了问题。请在下面找到路线详情
from("timer://foo?repeatCount=1")
.to("http4://localhost:8080/pages")
.split(body())
.to("seda:pageConsumer");
from("seda:pageConsumer?concurrentConsumer=5")
.toD("restlet:${in.body}")
.process(enrich());
路线详情:
问题:
当seda端点收到第一个URL时,一切都很好,即“http://localhost:8080/data?page=1&size=5”休息端点由restlet调用,预期数据在路由中处理。
当seda端点收到第二个URL时,即 “http://localhost:8080/data?page=2&size=5”,此问题开始而不是使用“page = 2& size = 5”作为查询参数调用rest端点,restlet使用来自第一个URL的查询参数,即“page = 1& size = 5”。并继续为其他网址提出问题。
经过调试,我发现Camel缓存了ProducerCache中的生产者 和producer被缓存在一个以端点uri为键的hashmap中。
为什么骆驼在缓存期间不尊重查询参数?是为什么要避免缓存?
请注意我通过更改网址以包含难看的网页详细信息来使代码正常工作。目前url看起来像 http://localhost:8080/data/page/2/size/5
答案 0 :(得分:0)
如果restlet端点正在调用相同的http url(例如host:port),那么使用带有此host:port的普通to
作为静态稍微好一些,然后使用动态设置标头一部分。
.setHeader(Exchange.HTTP_QUERY, constant("page1=&size=5"))
.to("http:xxxx")
然后重用相同的端点/生成器,然后标头包含带有查询参数的动态部分。
还有一个标题,您可以在Exchange
上设置上下文路径。
如果您继续使用toD
,则可以使用cacheSize
选项调整缓存的大小 - 与收件人列表中的相同:http://camel.apache.org/recipient-list.html