当前位置: 首页 > 知识库问答 >
问题:

在Google App Engine上运行骆驼路线

上官高畅
2023-03-14

我正试图在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)

事实证明,您不能在GAE上创建新的Thread实例,而这正是Timer组件所做的。

然后我试着用一个豆子把路线踢开:

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");

我运行了这个,结果却得到了与之前使用计时器时相同的“访问被拒绝”错误。

我所要做的就是从GAE内部启动一条路由,这样我就可以开始熟悉这两种技术(Camel&GAE)。但是对于我来说,我不知道如何做到这一点-每个骆驼组件似乎都创建线程,这在GAE上是非法的!所以我问:

  1. 如何在GAE上启动路由(初始生产者-计时器或其他)?我看到有一个camel-gae组件,我当然愿意阅读它并学习如何使用它,这样我就可以从ghttp://startrouteendpoint开始使用路由,但我实际上只是从这里开始,希望有一个更容易使用的组件/endpoint。
  2. 如果Timerbean组件都创建线程,而这在GAE上是不允许的,那么我有一种恶心的感觉,认为大多数/所有的Camel组件在GAE上都是不允许的。是这样吗?!?!如果是,您如何在GAE上html" target="_blank">构建有用/有意义的路由?或者有什么GAE“技巧”来让Camel运行和创建线程?例如,我知道GAE后端不会受到与前端实例相同的线程限制,等等。

提前感谢!

共有1个答案

夹谷鸿福
2023-03-14

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

正如你所意识到的,谷歌应用引擎有几个限制。这并没有使骆驼不能使用。您可以使用许多路由特性、生产者endpoint(.to(.))、转换等。

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

您还可以尝试通过GAE中的任何特性来启动事件,并且只需使用生产者模板来启动骆驼路线。

 类似资料:
  • 如何在Java的运行时添加骆驼路线?我找到了一个Grails示例,但我已经在Java实现了它。 我的应用程序上下文。xml已经有一些预定义的静态路由,我想在运行时向它添加一些动态路由。可能吗?因为包含动态路由的唯一方法是编写路由。然后将路由定义加载到上下文。它将如何在现有的静态路由上工作?运行时路由

  • 我的Apache骆驼项目开始有一个相当好的结构,但我陷入了困境,因为我的routeContext中的路由无限执行。我的所有路由都使用SQL组件,我希望所有路由只执行一次。 我发现,当我的routeContext中有两条路由时,两条路由都只执行一次,但是一旦我添加了第三条路由(不管第三条路由是什么),camel就开始无限执行所有路由。我所有的路由都导致sql插入,因此相同的路由运行多次会导致重复键错

  • 我正在尝试使用多部分/表单数据将文件上传到骆驼路由。一切都很好,但是,我无法获得原始文件名。骆驼版本是:3.14.1 更新 使用对路由的以下修改进行更新。我设法处理二进制文件(获取文件名并存储它们)。但是,对于文本文件,该文件将附加边界页脚: 路线定义: 先谢谢你了 爱德华

  • 我正在研究一个骆驼原型,它在同一骆驼环境中使用两个起点。 第一个路由使用用于“配置”应用程序的消息。消息通过配置服务bean加载到配置存储库中: 第二个路由实现了收件人列表eip模式,将不同类型的输入消息传递给许多收件人,这些收件人从同一个配置存储库中按顺序读取: 现在出现的问题是如何同步它们,因此如果第一个路由正在处理新数据,则第二个路由“等待”。 我是Apache Camel的新手,对如何处理

  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 背景:我按照这个链接设置了AWS MSK,并测试了生产者和消费者,它的设置和工作正常。我能够通过两个单独的EC2实例发送和接收消息,这两个实例都使用同一个Kafka集群(我的MSK集群)。现在,我想建立一条从Eventhubs到AWS Firehose的数据管道,其形式如下: Azure Eventhub- 我能够成功地做到这一点,没有使用MSK(通过常规的老Kafka),但由于未说明的原因,需要