问题标签 [apache-camel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-camel - 使用 Apache Camel 文件组件实现自定义流程策略
问题背景
我目前正在开发一个基于骆驼的 ETL 应用程序,该应用程序处理出现在过时目录中的文件组。这些文件需要作为一个由文件名开头确定的组一起处理。只有将完成的文件(“.flag”)写入目录后,才能处理这些文件。我知道骆驼文件组件有一个完成文件选项,但这只允许您检索与完成文件同名的文件。应用程序需要连续运行并在日期滚动时开始轮询第二天的目录。
示例目录结构:
迄今为止的尝试
我有以下启动处理的路线(名称混淆):
我的问题是如何配置文件端点。我目前正在尝试以编程方式配置端点,但运气不佳。到目前为止,我在骆驼方面的经验主要是使用 Spring DSL 而不是 Java DSL。
我沿着尝试实例化 FileEndpoint 对象的路线走下去,但是每当构建路线时,我都会收到一条错误消息,指出文件属性为空。我相信这是因为我应该创建一个 FileComponent 而不是端点。我不会在不使用 uri 的情况下创建端点,因为我无法使用 uri 在目录名称中指定动态日期。
问题
在这种情况下实施 GenericFileProcessingStrategy 是否正确?如果是这样,在某个地方有这样的例子吗?我查看了骆驼文件单元测试,并没有看到任何让我跳出来的东西。
我在配置端点时做错了什么?我觉得清理这个烂摊子的答案与问题 3 相关。
您可以将文件端点配置为在轮询和日期更改时滚动日期文件夹吗?
一如既往地感谢您的帮助。
activemq - Apache Camel inOut 路由,使用 jaxb 交换编组/解组
我们有这条 apache 骆驼路线,
....和这样的 bean 类
我们试图在这样的路线上发送消息并等待回复
前向路线上的对象正在出色地编组/解组。但是 setBody 调用会导致 java.io.NotSerializableException。有没有办法配置路由以在返回的路上使用相同的 jaxb 编组/解组?我的 Command 类包含一些 jaxb 生成的不可序列化的类对象。他们在前进方向上由元帅/解组员很好地处理,如果他们能在回来的路上会很棒。我对骆驼比较陌生,所以不确定这是否是最好的方法。
谢谢一堆。
unit-testing - 使用 Spring 配置测试 Camel 的问题
我定义了一个路由CamelRoutes.xml
,我想使用http://camel.apache.org/mock.html底部描述的包装技术来测试它们。
我的CamelRoutes.xml
所以我创建了CamelRoutesTest.xml
包含:
但我不确定如何创建一个既加载 spring xml 又提供对模拟端点的访问的测试。
如果我用..
然后我不知道如何获取模拟端点
如果我用..
然后我不知道如何加载我的骆驼上下文..
我似乎无法在网站上找到使用CamelTestSupport
并从 spring xml 加载路由的示例测试。
java - 如何配置 2.6 spring:在以下位置创建路由 route2 失败:
我正在尝试从 Camel 2.0 升级到 2.6
我的 applicationContext-camel.xml 文件中有这个...
通过在中间添加两行(政策和交易),我得到了例外......
原因:org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路由 route2:>>> From[transactionSaleBuffer] <<< 在路由中:Route[[From[transactionSaleBuffer]] -> [Tr ansacted[ref:trans.. . 因为 Route route2 没有输出处理器。您需要向路由添加输出,例如 to("log:foo")。
我可以看到这是因为 Camel 类 RouteDefinition.java 调用了 ProcessorDefinitionHelper.hasOutputs(outputs, true)。
这会传入一个对象的数组 ([Transacted[ref:transactionManagerETL]])
这一个对象有一个两个孩子
Policy 子节点没有输出,因此抛出异常。
然而我不知道如何添加一个孩子,我上面的 XML 与架构匹配。
也许我错过了其他东西?
我的设置与示例匹配... Apache Camel:在一页中预订(请参阅部分:Camel 1.x - JMS 示例)
谁能帮帮我。谢谢!杰夫·波特
java - Apache Camel http 到 http 路由(有可能吗?)
我现在从骆驼开始。我已经看到了用于 http 客户端的 http4 组件和用于 http 服务器的 jetty 组件。
我见过几个使用其中一个的例子。我想知道是否可以将它们组合在一起。
例子
这将使骆驼成为一个简单的基于http的路由器/代理。网络浏览器会点击骆驼网址,而不是谷歌。(谷歌只是一个例子,我想使用一个真正的基于 POST 的服务)
这条路线可以吗?我应该研究 Camel 还是需要一个不同的软件框架?将来我还需要在两者之间添加转换/过滤器。
我已经尝试过了,得到了一个空指针异常
spring - JMX 对象如何映射到 SNMP OID?
我有一个用 Apache Camel 编写的独立 Java 应用程序,我想通过 SNMP 对其进行监控。我认为 Camel 使用 Spring 的 JMX(@ManagedAttribute、@ManagedResource 等),我可以在 JDK jconsole 中看到各种与 Camel 相关的对象。当我在启用 SNMP 的情况下运行我的应用程序时:
我可以用 SNMP 浏览器连接到它,我也可以在那里看到很多东西。到目前为止一切顺利,但为了让我使用它,我需要知道或弄清楚 JMX 对象是如何映射到 SNMP OID 的。有没有办法找出它是如何完成的,或者至少是由谁完成的——Spring、JVM?有什么想法吗?
junit - 如何在 Apache Camel 中对生产路线进行单元测试?
假设我在单独的 RouteBuilder 类中创建了我的路线。看起来像:
- 从 JMS 队列中获取消息
- 做一些转换,验证等
- 根据验证结果转发到特定的 JMS 队列并将某些内容保存在 DB 中
我想在没有 JMS 代理和数据库的情况下对这条路线进行单元测试。我知道我可以模拟我的处理器实现,但这还不够。我不想改变这条路线(假设我在 jar 文件中得到了那个类)。据我从 Camel in Action(第 6.2.6 节)中了解到,为了能够使用端点模拟和其他东西,我需要更改我的路由端点定义(在本书的示例中,这是“mina:tcp:/ /miranda”到“mock:miranda”等)。
是否可以在不更改路由定义的情况下完全隔离地测试流程?如果我将 RouteBuilder 作为一个单独的类,我是否被迫以某种方式“复制”路由定义并手动更改它?不是测试错了吗?
我对骆驼很陌生,对我来说,能够在开发路线的同时进行独立的单元测试真的很酷。只是为了能够改变一些东西,运行小测试,观察结果等等。
spring - 将 Camel 路由公开为 Web 容器下的 REST 服务
我有想要作为 REST Web 服务公开的骆驼路线。应用程序部署在 Web 容器(Jetty/Tomcat)上,Spring 也用于 DI 和其他“基础设施”事物。
我查看了camel-restlet
和camel-cxfrs
组件,虽然它们都支持将路由公开为 REST 服务,但我无法找到如何避免启动单独的服务器。我真正想要的是能够以类似于为 Spring-WS 入站端点定义路由的方式定义 Camel 路由,例如
Web 应用程序的配置应该负责接受请求并将它们传输到适当的端点。
不得不承认,我很惊讶我无法找到有关该主题的足够信息,而且我认为我的要求并不是很奇特。
java - Apache Camel 以增量方式和定期方式从 ftp 中提取数据
我对 Apache camel 很陌生,我正在探索如何创建一个 rout,例如每 15 分钟从 ftp 提取数据并只提取新的或更新的文件,所以如果一些文件被提前下载并且仍然是相同(未更改)的 ftp 加载程序不应将它们加载到目标文件夹。
任何建议都非常感谢。
更新#1
我已经注意到我需要查看 FTP2,实际上我已经取得了进展,我要澄清的最后一件事:consumer.dealy 定义了每次下载尝试之间的延迟,例如 consumer.delay = 5s并且在第一次尝试 ftp 包含 5 个文件时,消费者将数据拉到某个地方并在第二次尝试时等待 5 秒 ftp 仍然相同,骆驼什么也不做,之后到 ftp 到达另外 5 个文件,5 秒后 ftp 消费者下载这些刚刚到达新文件或 consumer.delay 只是让消费者在每次下载文件之间等待(file#1 -> 5s -> file#2 -> 5s -> etc...)
我想实现第一个场景。
另外,我观察到一旦一些文件被下载到目标文件夹,我的意思是从 ftp 到本地文件系统,这些文件将在后续数据加载中被忽略,即使这些文件在本地文件系统上被删除,我怎么知道骆驼再次下载已删除的文件,它如何存储有关已加载文件的信息?并且似乎每次在第一次数据提取时甚至下载文件时它都会下载所有文件。我是否需要编写过滤器来排除已下载的文件?