apache-camel 相关问题

Apache Camel是一个功能强大的开源集成框架,基于已知的企业集成模式和强大的Bean集成

Apache Camel:如何并行发送两个http请求并等待响应?

在 Apache Camel 中,我定义了一个路由,如何并行发送两个或多个 http 请求并等待它们的“未来”以获取响应以进行进一步处理,就像在 Java 中使用 AsyncHttp...

回答 2 投票 0

Apache Camel:如何获取从 Rest API 返回的消息?

我有一条带有错误处理程序的路线: ... 我有一条带有错误处理程序的路线: <route errorHandlerRef="magentoCustomerErrorHandler" id="customers.route2"> ... <to id="_to1" uri="http4://{{magento.api.url}}customer/"/> </route> 在我的错误处理程序中,我在 onRedelivery 中调用处理器 <bean class="br.com.company.ProcessorError" id="myErrorProcessor"/> <bean class="org.apache.camel.builder.DeadLetterChannelBuilder" id="magentoCustomerErrorHandler"> <property name="deadLetterUri" value="activemq:magento:customers:DQL"/> <property name="onRedelivery" ref="myErrorProcessor"/> <property name="redeliveryPolicy" ref="myRedeliveryPolicyConfig"/> </bean> 在错误处理器中,我尝试获取 API 返回的消息,但我只获取骆驼生成的消息。 ErrorProcessor 类: public void process(Exchange exchange) throws Exception { Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class); exchange.getIn().setHeader("FailedBecause", cause.getMessage()); } API 响应: {"messages":{"error":[{"code":500,"message":"Token doesn't exist or is expired."}]}} 预期消息: Token doesn't exist or is expired 返回信息: HTTP operation failed invoking http://myurl.com/api/rest/customer/ with statusCode: 500 我的错误是我使用的异常类型。 要获取 REST 返回的正文,我需要使用 HttpOperationFailedException。 ErrorProcessor 类 public void process(Exchange exchange) throws Exception { HttpOperationFailedException cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, HttpOperationFailedException.class); exchange.getIn().setHeader("FailedBecause", cause.getMessage()); exchange.getIn().setHeader("ResponseBody", cause.getResponseBody()); } 尝试启用 useOriginalMessage 选项: <bean class="org.apache.camel.builder.DeadLetterChannelBuilder" id="magentoCustomerErrorHandler"> <property name="deadLetterUri" value="activemq:magento:customers:DQL"/> <property name="onRedelivery" ref="myErrorProcessor"/> <property name="useOriginalMessage" value="true"/> <property name="redeliveryPolicy" ref="myRedeliveryPolicyConfig"/> Camel 在进行 http 调用时将任何除 200 之外的 HTTP 响应代码视为失败,因此您需要 setThrowExceptionOnFailure 设置为 false 来指示 Camel 路由忽略 http 响应代码并仅返回它收到的任何正文。 这是 Java DSL 示例: getContext().getEndpoint(endpoint, HttpEndpoint.class).setThrowExceptionOnFailure(false); 确保端点是主机:端口,仅不带任何http路径,它完全匹配。 参考:http://camel.apache.org/http.html,寻找throwExceptionOnFailure 请注意,如果设置为 false,则camel不会走异常处理路由,正常返回,需要在camel路由之外处理错误响应。我认为这种方式更好,因为您可以从所调用的服务获得完整的响应,并且您可以根据响应中的实际失败代码/原因进行错误处理。

回答 3 投票 0

如何删除camelLock文件

我们正在 Quarkus 环境中运行 apache-camel,一旦该过程完成,我们希望删除以“camelLock”结尾的文件。我们只是对&qu...

回答 1 投票 0

如何通过命令行向Apache Camel传递参数?

我使用 Apache Camel 的 Spring Main 来启动我的 Camel 应用程序。我需要我的应用程序读取命令行参数来设置一些参数。因此,我无法使用属性文件。 此刻,我可以...

回答 2 投票 0

在camel-spring boot应用程序中getObject操作返回元数据而不是来自GCP的对象内容

我有一个 Spring Boot 应用程序,使用 Camel 连接到 google 对象存储以获取对象(文本或照片)。 这是我正在运行的代码: 封装 FootballRestAPI; 导入 org.apache.camel.b...

回答 2 投票 0

Camel 重试 - 使用 MockEndpoint 进行单元测试重新交付尝试计数

我正在尝试编写简单的单元测试来验证Camel路由是否配置正确以及是否真正进行了重新传递尝试。我有这个路线构建器实现: LocalEndpoint 类扩展

回答 1 投票 0

在 Apache Camel 中动态加载路由的最佳方法

我们开发了基于Karaf和Apache Camel的应用程序。虽然我们的应用程序完全基于捆绑包(OSGI),但我们还在星上加载 Camel 上下文(及其“路由上下文”)...

回答 3 投票 0

无法创建CamelSalesforcesourceSourceConnector:ResolveEndpointFailedException

背景:我是一名Python开发人员,从未使用过Java。 Camel Salesforce Source Connector:v3.20.6(我尝试过 3.21.0 和 4.0.0,但遇到了同样的问题) 卡夫卡:v3.6.1 问题: 尝试...

回答 1 投票 0

Apache Camel 将 XML DSL 中每个路由的日志记录到专用目录

如何在 XML DSL 中将每个 Apache Camel 路由定义为单独的专用目录/文件夹的日志记录?我们希望保留现有的记录器。 非常感谢您对前任的清晰而详尽的答复...

回答 1 投票 0

如何在quartz.properties文件中动态设置jobstore数据源

我正在使用 Apache Camel 的 Quartz 组件来运行一些预定路线。我想为调度程序配置 JDBC JobStore,并且能够在quartz 中设置必要的属性。

回答 1 投票 0

使用 Apache Camel 公开 Rest API - 收到 404

我尝试了非常简单的路线: 休息配置() .component("servlet"); 休息().get(“/你好”) .to(“直接:你好”); 来自(“直接...

回答 2 投票 0

从 Camel Rest DSL 生成 OpenAPI 时出错

我们最近将 apache Camel 从 3.x 升级到 4.x。从那时起 swagger 就不再工作了。请参阅 swagger ui 的附图。 启动应用程序时我们收到以下警告。 20...

回答 1 投票 0

将 Apache Karaf 部署到生产环境中

上下文:我目前正在使用 Apache Camel 执行一些集成任务。我使用 Maven 编译代码,它为我提供了安装在 Apache Karaf 实例(v. 4.4.1)中的捆绑包。在...之上

回答 1 投票 0

camel-jms:共享持久订阅:参数subscriptionName转义点(.)

阿帕奇阿耳忒弥斯:2.31.2 弹簧启动:2.7.18 阿帕奇骆驼:3.22.0 我有一个关于 ActiveMQ Artemis 中 Camel 共享持久订阅的问题。 我已从 ActiveMQ Classic VirtualTopics 迁移,...

回答 1 投票 0

Camel Kafka接收器连接器配置和依赖项

我正在尝试使用“camel-azure-storage-datalake-kafka-connector”从 Kafka 连接到 Azure ADLS Gen2 我有一个运行 Docker 的 Linux 机器,其中包含 debezium/zookeeper、debezium/kafka 和 debe...

回答 1 投票 0

将 CachedOutputStream 转换为字符串

将 CachedOutputStream 转换为字符串。 将camel从2.12升级到2.23后,我的路线出现问题,相同的代码相同的路线。 调用端点后的响应是 org.apache.camel 类型。

回答 1 投票 0

Camel/Quarkus - AdviceWith 无法通过 id 找到路线

我有以下路线: 来自(“直接:某些路线”) .id("一些路线") 。日志(...) .to("sql-stored:someProcedure(BIGINT ${exchangeProperty.someVal})") .id("someCall&...

回答 1 投票 0

从外部源加载 Apache Camel 路由

我正在尝试构建一个 Java 应用程序,该应用程序从外部源(最好是数据库)加载 YAML DSL Camel 路由。这个想法是提供在外部编辑这些路线的可能性,刷新

回答 1 投票 0

使用 Apache Camel Servlet 组件获取状态为 404 的白标签页面

我正在使用 Camel 向其他系统提供 Web 服务。我编写了一个简单的 Camel 消耗路由来接受 http 请求。我可以使用 Springboot 成功启动 Camel 应用程序。但是...

回答 1 投票 0

Quartz 组件未在 Spring Boot 应用程序上调用驼峰处理器

我创建了具有以下依赖项的简单 JBossFUSE spring boot 应用程序 我创建了具有以下依赖项的简单 JBossFUSE spring boot 应用程序 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>sample.fuse</groupId> <artifactId>sample-FUSE</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>springboot-camel-restdsl-api</name> <description>Camel SpringBoot REST API Example with REST DSL</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <start-class>sample.fuse.UrarepSpringBootApplication</start-class> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring-boot-starter</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-servlet-starter</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jackson</artifactId> <version>2.19.0</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>mq-jms-spring-boot-starter</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>com.ibm.mq.allclient</artifactId> <version>9.2.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-artemis</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-quartz</artifactId> <version>2.13.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 然后我使用以下内容创建了简单的 RouteBuilder package sample.fuse.routebuilder; import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.rest.RestBindingMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import sample.fuse.process.*; import javax.ws.rs.core.MediaType; @Component public class MyRouteBuilder extends RouteBuilder { static Logger LOG = LoggerFactory.getLogger(MyRouteBuilder.class); @Autowired TestProcessor testProcessor; @Override public void configure() throws Exception { from("quartz://seasonParkingProcessorCron?cron=10+*+*+*+*+?&trigger.timeZone=America/Chicago&job.name=seasonParkingProcessorCron") .log(LoggingLevel.INFO, "seasonParkingProcessorCron job kicked off") .process(testProcessor); } } 示例处理器有以下内容。 package sample.fuse.process; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import sample.fuse.repository.MevEhtVideoImagesRepository; import java.util.Calendar; @Service @Component public class TestProcessor implements Processor { static Logger LOG = LoggerFactory.getLogger(TestProcessor.class); @Autowired Environment environment; @Autowired private MevEhtVideoImagesRepository mevEhtVideoImagesRepository; public TestProcessor(){ } @Override public void process(Exchange exchange) throws Exception { String body= (String) exchange.getIn().getBody(); LOG.info("TestProcessor Called with exchange: " + body); System.out.println("AAAAAAAAAAAAAa"); exchange.getOut().setBody(body+" "+ Calendar.getInstance().getTime()); } } 我希望每 10 秒调用一次 Processor 方法并打印日志。然而,它在日志上给出以下错误。 11:58:10,013警告[org.apache.camel.component.quartz.QuartzEndpoint](DefaultQuartzScheduler-camel-1_Worker-1)无法使用上下文执行Quartz作业:JobExecutionContext:触发器:'Camel.seasonParkingProcessorCron作业:DEFAULT.seasonParkingProcessorCron fireTime : 'Thu Dec 21 11:58:10 SGT 2023 ScheduleFireTime: Thu Dec 21 11:58:10 SGT 2023 previousFireTime: 'null nextFireTime: Thu Dec 21 11:59:10 SGT 2023 isRecovering: false refireCount: 0 因为处理器不是开始:RoundRobinLoadBalancer 还有其他人遇到过这种错误吗? 您必须为骆驼石英使用相同版本的骆驼核心版本。但是在你的pom文件中camel-core和camel-quartz版本应该匹配。 pom 文件中的camel-quartz 依赖项应更新如下 <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-quartz</artifactId> <version>2.19.0</version> </dependency> 然后你的MyRouteBuilder类配置方法内容需要更改如下。 from("quartz://seasonParkingProcessorCron?cron=10+*+*+*+*+?") .log(LoggingLevel.INFO, "seasonParkingProcessorCron job kicked off") .process(testProcessor); 希望这将有助于解决您的问题。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.