【发布时间】:2018-07-28 09:13:46
【问题描述】:
我使用的是 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());
路线详情:
- "http4://localhost:8080/pages" 这个 rest 端点返回 url 列表 网址=http://localhost:8080/data?page=1&size=5
- seda 消费者用于并行消费每个页面
- url "http://localhost:8080/data?page=1&size=5" 流式传输数据(这是一个休息端点,endpont 不发送数据列表,而是端点流式传输数据)
- restlet 端点调用页面 url 并流式传输数据。
问题:
当 seda 端点收到第一个 URL 时,一切正常,即“http://localhost:8080/data?page=1&size=5”rest 端点由 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.
【问题讨论】:
-
尝试禁用流缓存并进行测试。
from("seda:pageConsumer?concurrentConsumer=5").noStreamCaching().toD("restlet:${in.body}").noStreamCaching()...... -
如果在拆分器中使用流选项会怎样?
标签: apache-camel