标签: apache-camel

log4j:WARN 找不到记录器的附加程序 (org.apache.camel.impl.DefaultCamelContext)

我开发了一个 Java Camel 项目,可以将文件从resources/data/inboxSFTP 服务器移动到 SFTP 服务器。

当我运行它时,我收到此消息:

/usr/lib/jvm/jdk1.8.0_144/bin/java... log4j:WARN 找不到记录器的附加程序(org.apache.camel.impl.DefaultCamelContext)。log4j:WARN 请正确初始化 log4j 系统。log4j:WARN 有关更多信息,请参阅 http://logging.apache.org/log4j/1.2/faq.html#noconfig。进程以退出代码 0 结束

我真的不明白该警告消息的含义。谁能解释我如何处理它?

java apache-camel

1
推荐指数
1
解决办法
4706
查看次数

骆驼头变量和属性的大小限制

我必须将请求 xml 存储到数据库中。我正在使用标头变量来做到这一点。

exchange.getIn().setHeader("inputRequestXml", body);
Run Code Online (Sandbox Code Playgroud)

它适用于某些文件而且我在某些文件中遇到了异常,这似乎是因为文件大小。

 413 Request entity too large
Run Code Online (Sandbox Code Playgroud)

所以我通过使用骆驼属性改变了实现,如下所示

exchange.setProperty("inputRequestXml", body);
Run Code Online (Sandbox Code Playgroud)

现在我没有得到例外。但恐怕它会在实际的 PROD 环境中处理更大的文件。所以我想知道,标头变量和属性的大小限制是多少?

xml apache-camel

1
推荐指数
1
解决办法
2613
查看次数

Apache Camel 作为 Kafka 的生产者/消费者

过去两天我一直在研究 Apache Camel 和 Kafka,希望能了解消息传递框架/代理。Camel/Kafka 的一个可能用例是使用 Kafka 作为消息代理,同时使用 Camel 实现生产者和消费者吗?我看到了一个类似的简短示例,但似乎无法再次找到它。如果不是,Camel:Kafka 组件的意义何在?

messaging apache-camel apache-kafka

1
推荐指数
1
解决办法
9243
查看次数

如何在 AggregationStrategy 中优雅地将 newExchange 从 JSON 解组为 POJO

是否有使用自定义聚合策略将 JSON 解组为 Apache Camel 中的 POJO 的优雅方法?

我的简单路由从 SQS 获取一条消息,该消息是 JSON。此消息用作另一个服务的输入,而后者又根据消息内容让我知道原始消息应发布到的服务的 URL 是什么。

使用 AggregationStrategy 丰富 EIP 非常适合这一点。但是,我无法弄清楚如何在路由中优雅地将 JSON 解组为 POJO。我可以通过 ObjectMapper 做到这一点,但这看起来很难看。有没有更好的处理方法?一些我还没见过的神奇骆驼酱?

public RouteBuilder route() {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("aws-sqs://" + sqsName + "?amazonSQSClient")
            .setHeader("Content-Type",simple("application/json"))
            .enrich()
            .simple("http4://localhost:8080/getUrl")
            .aggregationStrategy(new AggregationStrategy() {
                @Override
                public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
                    String aPojoStr =  newExchange.getIn().getBody(String.class);
                    ObjectMapper mapper = new ObjectMapper();
                    RestAnswererResponse responosePojo;
                    try {
                        responosePojo = mapper.readValue(aPojoStr, RestAnswererResponse.class);
                    } catch (JsonParseException e) { …
Run Code Online (Sandbox Code Playgroud)

json apache-camel unmarshalling

1
推荐指数
1
解决办法
1674
查看次数

如何使用 Apache Camel REST DSL (Servlet/Restlet) 设置 HTTP 状态码原因

我有一个使用 Spring Boot 和 Apache Camel 构建的 Web 应用程序,我正在实现一个 REST 接口。目前,使用 Camel 默认ServletRestlet组件,我没有在响应中获得 HTTP 状态代码原因。

这是我在将 HTTP 状态代码设置为 403 时得到的示例响应:

< HTTP/1.1 403 
< Date: Mon, 19 Feb 2018 10:01:21 GMT
< Server: Restlet-Framework/2.4.0
< Content-Type: application/json
< Content-Length: 75
Run Code Online (Sandbox Code Playgroud)

应该如何:

< HTTP/1.1 403 Forbidden
< Date: Mon, 19 Feb 2018 10:01:21 GMT
< Server: Restlet-Framework/2.4.0
< Content-Type: application/json
< Content-Length: 75
Run Code Online (Sandbox Code Playgroud)

如何配置 Camel/Restlet/Servlet 以在 HTTP 状态代码中包含原因?

我目前的配置:

应用程序.java

@SpringBootApplication
public class Application extends SpringBootServletInitializer { …
Run Code Online (Sandbox Code Playgroud)

java rest restlet apache-camel spring-boot

1
推荐指数
2
解决办法
6563
查看次数

CamelHttpResponseCode 在服务错误时为空

我是骆驼新手,正在编写一个小型 POC 以在现有应用程序中实现。应用程序将 xml 请求作为输入,其中包含请求的服务和相关数据。然后它会一一调用这些服务。当服务被成功调用时,我会在处理器中检索 http 响应代码,如下所示,并执行进一步的逻辑:

Object code = exchange.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE);
    if(null!=code && code instanceof Integer)
    {
        responseCode = (Integer) code;
    }
Run Code Online (Sandbox Code Playgroud)

在成功的情况下,收到的 responseCode = 201

根据responseCode,我知道服务调用是否成功,然后继续下一个。

但是,我试图通过使服务 url 不正确来产生负面情况,并且再也看不到 http 响应代码:

原始服务网址 - http://xxx:0000/.../.../.../.../...

修改后的服务网址 - http://xxx:0000/.../.../.../.../abc/...

在失败的情况下,收到的 responseCode = null

在邮递员中,我收到以下错误:

org.apache.camel.http.common.HttpOperationFailedException:HTTP 操作失败调用http://xxx:0000/.../.../.../.../abc/... statusCode: 404 at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:274) at org.apache.camel.component。 http.HttpProducer.process(HttpProducer.java:183)

我不知道为什么当邮递员的错误消息中出现 http 响应代码时,Exchange 不包含它。

我使用 onException 来处理任何异常,然后调用处理器来进一步处理流程:

<camel:onException>
                <camel:exception>java.lang.Exception</camel:exception>
                <camel:process ref="xxxProcessor" />
            </camel:onException>
Run Code Online (Sandbox Code Playgroud)

我想我可以将 responseCode=null 视为失败并继续我的逻辑,但想了解为什么响应代码被返回为 null。

提前致谢!

java spring apache-camel

1
推荐指数
1
解决办法
1238
查看次数

覆盖或拦截骆驼日志

现有应用程序使用 Camel 日志记录(陷入“log()”DSL,以及 Log 组件。

我们希望拦截或覆盖,以便每条日志消息也记录出特定的 Header 值(例如 x-correlation-id=ABC-123)

实现这一目标的好的惯用方法是什么?

apache-camel

1
推荐指数
1
解决办法
1018
查看次数

你什么时候会使用企业服务总线和像 Apache Camel 这样的集成框架?

我试图通过阅读这篇文章来解决何时使用 Apache Camel 是合适的还是不合适的 - https://dzone.com/articles/when-use-apache-camel。文章中提到,在服务数量较少的情况下,使用Camel这样的集成框架可能会有些矫枉过正,这是有道理的。但是我被这句话搞糊涂了

尽管 FuseSource 提供商业支持,但我不会将 Apache Camel 用于非常大的集成项目。在大多数情况下,ESB 是完成这项工作的正确工具。它提供了许多附加功能,例如 BPM 或 BAM。当然,您也可以使用多个单一的框架或产品并“创建”您自己的 ESB,但这是浪费时间和金钱(在我看来)。

这是因为集成框架缺少 ESB 提供的组件吗?如果有,那些是什么?

esb apache-camel fuseesb

1
推荐指数
1
解决办法
371
查看次数

如何在 Camel 3.0 上添加附件

在 Camel 2.x 中,我可以向消息添加附件,例如:

exchange.getOut().addAttachment("LogFile.log.gz", new DataHandler(Base64.decodeBase64(FileContentBase64),"application/x-gzip"));
Run Code Online (Sandbox Code Playgroud)

但在 Camel 3.0 中这是不可能的。我像迁移指南所说的那样更改我的代码:

exchange.getMessage().addAttachment("LogFile.log.gz", new DataHandler(Base64.decodeBase64(FileContentBase64),"application/x-gzip"));
Run Code Online (Sandbox Code Playgroud)

但它不起作用。这也不是:

exchange.getIn().addAttachment("LogFile.log.gz", new DataHandler(Base64.decodeBase64(FileContentBase64),"application/x-gzip"));
Run Code Online (Sandbox Code Playgroud)

有一个想法,来解决这个问题。

我想通过电子邮件发送此附件。

java apache-camel apache-camel-mail

1
推荐指数
1
解决办法
1142
查看次数

骆驼 3.x 升级

我正在升级到骆驼 3.x 并且在寻找方法时遇到了一些麻烦。他们的迁移指南并没有完全涵盖所有内容。具体来说,我正在寻找替代品:

camelContext.addRouteDefinitions(...)
...
camelContext.getRouteDefinitions()
Run Code Online (Sandbox Code Playgroud)

我无法在文档中找到任何这些内容。

编辑:

我可以用这个直接打电话给他们:

camelContext.getExtension(Model.class).getRouteDefinitions()
Run Code Online (Sandbox Code Playgroud)

但这似乎不太合适……

java apache-camel

1
推荐指数
1
解决办法
357
查看次数