Tag: apache camel

使用ActiveMQ,Camel和Spring实现Request-Reply模式

我正在尝试实现以下function: 然后逐行读取CSV文件: 根据该行包含的值构建请求 将请求发送到消息队列 其他组件需要接收消息,处理请求并将响应发送到另一个消息队列(生产者已知,因此生产者可以获取响应)。 我相信请求 – 回复模式适合该法案。 我安装了ActiveMQ,下载了camel并尝试使用他们的jms项目。 配置组件,队列和测试连接(工作)后,我试图弄清楚实际上如何实现请求 – 回复? 我没有找到任何好的例子 我有一个RouteBuilder RouteBuilder public class MyRouteBuilder extends RouteBuilder { public static void main(String[] args) throws Exception { new Main().run(args); } public void configure() { from(“file:src/data?noop=true”) .to(“activemq:RequestQ”); from(“activemq:RequestQ?exchangePattern=InOut&timeToLive=5000”) .inOut(“activemq:RequestQ”, “bean:myBean?method=someMethod”); } } 骆驼的context.xml org.apache.camel.example.spring 问题: 如何读取文件逐行构造并根据行内容发布消息? 如何配置路由以及如何配置邮件头以便在获取响应后将被删除的临时队列中获取响应? 您可以推荐哪些快速入门指南? 编辑 我得到了下面的代码。 现在让我们说在处理器中我创建响应。 我该如何寄回? 我该如何使用响应? public […]

Camel Splitter并行处理数组列表 – 并发访问问题

使用Camel拆分ArrayList并并行处理每个项目最多10个线程。 以下是配置。 线程池配置文件设置为最大线程数= 10。 ${body} java.lang.Exception true bean:reportRepository?method=getPendingTransactions获取ArrayList并传递给Splitter。 processReportChannel是处理项目的处理器。 问题:作业启动时它会启动10个线程,但有些线程正在拾取相同的项目。 例如,如果我在ArrayList,thread_no_1和thread_no_2中有item_no_1到10,或者有时候更multithreading正在拾取,那么就说item_no_2。 是因为Array List不是线程安全的,Splitter不管理它吗? 我不是这方面的专家,需要帮助指出问题所在。

在spring boot中使用现有的http服务器作为camel端点

我有一个使用spring boot starter web的spring boot应用程序。 这将创建一个正在运行的Tomcat实例,并设置在端口上运行的http服务器。 在我的骆驼路线中,我想使用这个http服务器作为http请求的组件,但我无法弄清楚如何利用它。 我看到很多配置jetty实例并从中消耗的例子,但是实际上我不会运行两个http服务器吗? 我只想要一个。 我假设http服务器已经自动assembly,因为我可以使用其他弹簧代码(例如RestController)从中消耗它,我也可以看到它在我的spring启动日志中启动。 @Component public class ExampleRoute extends RouteBuilder { @Override public void configure() throws Exception { //@formatter:off from( ) .log( LoggingLevel.INFO, log, “Hello World!” ); //@formatter:on } }

Camel CSVRecord Camel Bindy

我正在使用带有bindy(2.16.0)的camel来解析csv文件。 该文件包含页眉和页脚。 两者都用作元数据来描述所有其他记录的公共数据。 (客户定义所以我无法更改CSV格式) 我使用Bindy为我解析数据。 我遇到的问题是,对于CSVRecord,您无法排除页脚。 我能够跳过标题但解析数据失败,因为它无法解析页脚,因为数据格式不同。 有没有办法从CSVRecord bindy中排除最后一行/页脚,或者有骆驼读取并以另一种方式删除最后一行?

Java Camel框架:丢失处理器中的消息体

所有, 这是一条简单的路线: … JsonValidator是一个简单的Java bean,我扩展了处理器。 在这里,我想确保在使用Jackson将JSON解组到我的POJO之前继续使用unmarshal调用之前传递所有必需字段。 我现在所做的只是一行: public void process(Exchange exchange) throws Exception { String input = exchange.getIn().getBody(String.class); } 简单地调用exchange.getIn()。getBody(String.class)会导致我的路径中的下一个(解组)步骤抛出错误,说没有任何解组。 事实上,我通过在JsonValidator之后添加另一个处理器来测试这个 – 在那里,交换体不是null但是它是空的。 这是错误: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: org.apache.camel.converter.stream.InputStreamCache@78f0a00a; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2931) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2873) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2080) at org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:105) at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:65) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398) […]

记录骆驼路线

我在我的项目中有几个Camel上下文,我想以逆向工程的方式记录路由,因为我们希望保持文档与上下文相关。 什么是最好的方法?

Camel – 流缓存不缓存/无法转换?

在阅读一次之后,我似乎正在失去我的“身体”。 请注意,我正在使用Camel的流缓存,并且输入是来自http组件的json文件。 我有一个处理器,代码如下。 log.debug(“Body Type: ” + exchange.getIn().getBody().getClass().getCanonicalName()); log.debug(“In msg1:” + exchange.getIn().getBody(String.class)); log.debug(“In msg2:” + exchange.getIn().getBody(String.class)); 我期望在这里看到的是msg1和msg2是相同的输出,但是msg2返回一个空字符串(非空)。 以下是TRACE级别的日志。 1- DEBUG com.mycompany.MyProcessor : Body Type: org.apache.camel.converter.stream.InputStreamCache 2- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Converting org.apache.camel.converter.stream.InputStreamCache -> java.lang.String with value: org.apache.camel.converter.stream.InputStreamCache@780a5cef 3- TRACE org.apache.camel.impl.converter.DefaultTypeConverter : Using converter: StaticMethodTypeConverter: public static java.lang.String org.apache.camel.converter.IOConverter.toString(java.io.InputStream,org.apache.camel.Exchange) throws java.io.IOException to convert [class org.apache.camel.converter.stream.InputStreamCache=>class java.lang.String] 4- […]

如何使用spring DSL在camel中记录标头值

这看起来应该很简单,原谅双关语。 我正试图在Spring DSL路线中记录骆驼的标题。 我已经看到了Java DSL的答案,但我一直在寻找如何使它在Spring DSL中工作的徒劳。 我试过了: 并且: 和其他几个排列/变体,但所有这些只是简单地记录该文本(即它们不替代实际的标题名称)。 我错过了什么? 更新:这是我的xml文件的更大部分: ${body} ${body.batchNumber}.xml

从Spring注释配置初始化camel

我正在努力学习Spring并了解它是如何工作的。 我已经按照一些教程设置了Spring和Camel,并使用默认设置。 我现在正尝试尽可能多地将我的配置XML文件转换为Java类。 到目前为止,我已经成功地在Java类中创建了camel-routes(扩展了SpringRouteBuilder并实现了configure()),以及我的spring-configuration文件中的所有bean(Bean-> Function with @Bean)。 我唯一缺少的部分是camelContext定义(?),它启动了我的驼峰路线(我认为……): net.krg.kneip.routing 这个等效的非XML会是什么? 不确定它是否会有所帮助,但到目前为止我的AppConfig类是: http : //pastebin.com/vsRAbpK1 谢谢! 解: @Bean public CamelContext camel() throws Exception{ CamelContext camelContext = new DefaultCamelContext(); camelContext.addRoutes(new net.krg.kneip.routing.Routes()); camelContext.start(); return camelContext; }

camel是否为每条路线创建一个线程

最近我开始使用驼峰,我发现它可能解决了我的很多集成层需求。 我创建了一个java客户端应用程序(不在任何容器中运行),我定义了两个路由: route1:将文件从传入的folder1移动到folder2 route2:将文件内容从folderx移动到mq队列。 我启动我的应用程序,这些路由正在他们的工作轮询这些文件夹并相应地路由消息。 任何人都可以解释我的路线如何运作。 camel(context)是否为每个路由创建一个线程。 究竟发生了什么? 注意:我在骆驼网站上找不到关于此的简单说明。