问题标签 [apache-camel-3]
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.
testing - Camel 3:如何使用 `interceptSendToEndpoint` 拦截来自 `onException` 的路由
问题:
在从 Camel 2 迁移到 3 期间,我的错误路由测试失败了。
我遵循的模式是强制异常并断言该onException()
块使用适当的标签发送到我的指标路由。
我正在使用 uri 模式匹配来单独测试每个标签是否被发出......这会强烈影响测试模式
注意:在下面的两个示例中,createRouteBuilder()
方法是相同的
传递骆驼 2 示例
失败的骆驼 3 示例
没有接收交换,mockEndpoint
而是仍然转到指标端点。
问题:
在 Camel 3 中,如何像在 Camel 2中使用模式一样拦截路线?手动测试显示错误路由在 prod 中的行为符合预期,因此这似乎是一个测试配置问题。
其他详情:
- 来自骆驼回购的这个单元测试演示了我正在尝试做的事情,但是通过手动拦截路由而不是
mock:
直接在路由中使用。 当我不需要模式匹配时,这种替代方法有效
/li>
apache-camel - Camel JMS 组件缓存级别和 Spring 的 CachingConnectionFactory
根据 Apache camel 的文档,我们应该将缓存级别设置为 CACHE_CONSUMER,以便在处理非 XA 事务时获得更好的性能。可能他们这样做了,因为 PooledConnectionFactory 不缓存消费者。
我使用 Spring 的 CachingConnectionFactory 代替 PooledConnectionFactory,因为 PooledConnectionFactory 与 ActiveMQ 耦合,我正在处理 IBMMQ。
另一方面,CachingConnectionFactory 也缓存生产者和消费者。所以我希望在这种情况下,将 JmsComponent 的缓存级别设置为 CACHE_CONSUMER 是没有意义的。
如果我错了,请纠正我。任何建议都会有很大帮助
spring-boot - 使用spring boot 2.2.4更新到camel 3.0.0-RC3后,Camel在文本属性中找不到{{xxx}}
我使用的是弹簧靴2.2.4.RELEASE
和骆驼版2.23.0
为了使骆驼可以访问属性并在uri路由中使用它们{{ }}
添加camel-spring-boot-starter
依赖和定义PropertySourcesPlaceholderConfigurer
,SpringCamelContext
bean就足够了
--
现在,在我更新camel-spring-boot-starter
为3.0.0-RC3
遵循迁移指南并修复了组件的导入之后。在运行时,骆驼找不到属性,我得到了这个:
Property with key [xxx] not found in properties from text: activemq:queue:{{xxx}}
任何想法发生了什么变化,为什么{{ }}
我的路线不再起作用?
更新 1
我更新了弹簧靴来回,我2.2.6.RELEASE
仍然得到同样的东西camel-spring-boot-starter
......3.2.0
org.apache.camel.springboot
路线并不花哨。
我需要{{ }}
从中读取xxx
值myProperties.properties
使用@Value("${xxx}")
works,spring可以访问它,我可以将它传递给路由URI字符串。
在骆驼 URI 中访问{{xxx}}
是更新后停止工作的原因。
更新 2
我反映了接受答案所做的测试。去除SpringCamelContext
和PropertySourcesPlaceholderConfigurer
豆子就可以了。
我取出了豆子SpringCamelContext
,它起作用了。显然,这个新的 spring camel starter 会SpringCamelContext
自行处理,我的 bean 使用了与骆驼读取属性相关的自动配置{{ }}
我还删除了 bean PropertySourcesPlaceholderConfigurer
,@Value 并没有停止工作。
spring-boot - 由于双斜杠,spring boot camel 3 camel-endpointdsl vs uri字符串不兼容//
我们正在从骆驼迁移2.x
到骆驼3.x
我正在从这些路由定义格式转换使用 uri 字符串编写的路由
转为以下端点-dsl 格式:
问题是,URI 格式像这样注册路由:
但是新的camel dsl格式会像这样注册路由(没有//):
问题是使用附加到组件的双斜杠注册的路由(URI 行为)与没有双斜杠注册的路由不匹配(新的端点-dsl 行为)。
而且我必须将所有路由转换为使用 URI 或端点 dsl。否则我会收到错误消息,例如告诉路由没有消费者direct://loadConfiguration
......因为from(direct("loadConfiguration"))
是使用 dsl 定义的,并且它被注册为direct:loadConfiguration
.
是否有一个配置选项可以让骆驼//
在使用 URI 时不附加到组件或让骆驼忽略它//
?
spring-boot - 重要 onException shareUnitOfWork Apache Camel
使用 onException 时,我无法让它共享工作单元。我确实需要使用多播和拆分器。到目前为止,我已经尝试过诸如 useOriginalMessage 等,但无法成功。
流程;Apache CXF -> JAXRS-> 异常 -> OnException -> 处理器 -> 响应正文
apache-camel - AggregationStrategy 一直警告超时
为什么 AggregationStrategy 实现在超时时总是记录警告?发生这种情况时,我看不到聚合中的任何交换/数据丢失。
当完成超时要求满足时, AggregateProcessor 调用此超时方法。该事件的任何日志记录都可能是调试或信息性的,但不应引起警告。
这是我路线的汇总部分。
java - Apache Camel Endpoint-dsl 自定义组件名称
我正在尝试使用 Apache Camel 3 Endpoint DSL。到目前为止,这是我的代码。它工作正常。这是一个测试,所以它真的很简单。它从目录中读取并记录文件内容。
但是当我尝试更改组件的名称时。例如 final String componentName = "myCustomFileComponent";
我在控制台中收到以下错误
从这里,我知道我可以为示例中的端点myWMQ和myAMQ提供自定义名称。例如,路由从一个目录读取并写入另一个目录,我希望每个组件都以不同的方式进行配置。但是,如果我指定一个自定义组件名称,我会收到错误消息。因为它没有找到 custonName 组件。
我不知道它是否相关,但代码在 Spring Boot 项目中
- Apache Camel 版本 3.4.0 Spring Boot 版本 2.3.1
spring-boot - Apache Camel 3.4 版超时未按预期工作
我正在使用这个 Spring Boot Apache Camel 版本
非常简单的场景,我试图将文件从一个文件夹复制到另一个文件夹。在理想情况下(没有给出超时),路由应该无限期地等待文件进入源文件夹。一旦文件来了,它应该选择它并再次循环并等待下一个。它适用于 Camel2.2,但不适用于最新版本。
代码:
任何骆驼专家的建议?
结果,我在输入目录中有 2 个文件。
使用camel2.2输出:
使用camel3.4 springboot输出:[ERROR ONCE input DIR IS EMPTY]
apache-camel - 停止+中断现有路线
我有一条正在等待锁的骆驼路线。让我们模拟如下:
在某个时间点,我想尽快停止这test
条路线。有没有办法在中断当前处理这条路线的线程时停止这条路线?我尝试stopRoute
如下,但这似乎并没有中断线程。
我正在使用 Camel 版本 3.4.x。
spring-boot - 在骆驼3中正确设置http套接字超时
拥有这个 Spring-XML 配置
我socketTimeout is a custom option that is not part of the Camel component
在 IntelliJ IDEA 中收到警告。
事实上,在骆驼文档中,我在组件选项中看到了 socketTimeout,上面代码片段中的其他选项在查询参数中,所以问题是是否应该以不同的方式指定 socketTimeout?正确的方法是什么?
提前致谢