0

我试图在 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 上是非法的!所以我问:

  1. 您甚至如何在 GAE 上启动路线(初始制作人 -Timer或其他)?我看到有一个Camel-GAE组件,我当然愿意阅读它并学习如何使用它,这样我就可以拥有从ghttp:///startRoute端点开始的路由,但我真的只是从这里开始希望有一个更容易使用的组件/端点。
  2. 如果TimerBean组件都创建线程,而这在 GAE 上是不允许的,我有一种恶心的感觉,即大多数/所有 Camel 组件在 GAE 上都是不允许的。是这样吗?!?!如果是这样,您如何在 GAE 上构建有用/有意义的路线?或者是否有一些 GAE“技巧”让 Camel 运行并创建线程?例如,我知道 GAE 后端不会受到与前端实例相同的线程限制等。

提前致谢!

4

1 回答 1

0

Camel 是为在使用 Java SE 6/7 的 Java 环境中运行而构建的,包括文件系统访问、线程创建、打开端口的可能性等。

如您所知,Google App Engine 有几个限制。这并不会使 Camel 完全无法使用。您可以使用许多路由功能、生产者端点 (.to(..))、转换等。

事实上,在 Java EE 应用服务器中,也有类似的限制,但这并不妨碍骆驼的使用。

如果你真的愿意,并且需要在 GAE 中做所有的骆驼,也许可以将 Camels 中的插孔可插入线程模型放入 GAE。

免责声明:我从未使用过 GAE 任务,但这里有一些文档

https://developers.google.com/appengine/docs/java/taskqueue/ http://camel.apache.org/threading-model.html

您还可以尝试通过 GAE 中的任何功能启动事件,然后使用生产者模板启动 Camel 路线。

于 2013-02-02T14:30:14.090 回答