我试图在 GAE 上开始一条骆驼路线,然后又遇到一堵砖墙。首先,我尝试了一条如下所示的路线:
from("direct:start")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
logger.info("I made it!");
}
})
.to("direct:end");
但这无济于事。作为 Camel 和 GAE 的新手,我怀疑这是因为该direct
组件不充当路线开始的消费者。所以然后我尝试启动一个计时器:
from("timer://runOnce?repeatCount=1")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
logger.info("I made it!");
}
})
.to("direct:end");
只是从 GAE 得到一个令人讨厌的错误:
错误:访问被拒绝(java.lang.RuntimePermission modifyThreadGroup)
事实证明,您无法Thread
在 GAE 上创建新实例,而这正是Timer
组件所做的。
所以我试着用一个 bean 开始这条路线:
public class DummyBean {
public void kickoffRoute() { return; }
}
// Inside the method that creates and starts the Camel route
SimpleRegistry reg = new SimpleRegistry();
DummyBean bean = new DummyBean();
reg.put("dummy", bean);
CamelContext camel = new DefaultCamelContext(reg);
camel.disableJMX();
// Inside my RouteBuilder
from("bean:dummy")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
logger.info("I made it!");
}
})
.to("direct:end");
我运行了这个,只是为了得到与以前相同的“访问被拒绝”错误Timer
。
我要做的就是从 GAE 内部开始一条路线,这样我就可以开始熟悉这两种技术(Camel 和 GAE)。但是对于我的生活,我无法弄清楚如何做到这一点 - 每个 Camel 组件似乎都会创建线程,这在 GAE 上是非法的!所以我问:
- 您甚至如何在 GAE 上启动路线(初始制作人 -
Timer
或其他)?我看到有一个Camel-GAE
组件,我当然愿意阅读它并学习如何使用它,这样我就可以拥有从ghttp:///startRoute
端点开始的路由,但我真的只是从这里开始希望有一个更容易使用的组件/端点。 - 如果
Timer
和Bean
组件都创建线程,而这在 GAE 上是不允许的,我有一种恶心的感觉,即大多数/所有 Camel 组件在 GAE 上都是不允许的。是这样吗?!?!如果是这样,您如何在 GAE 上构建有用/有意义的路线?或者是否有一些 GAE“技巧”让 Camel 运行并创建线程?例如,我知道 GAE 后端不会受到与前端实例相同的线程限制等。
提前致谢!