当前位置: 首页 > 知识库问答 >
问题:

骆驼事务JMS组件无法与聚合器一起使用

尉迟高澹
2023-03-14

我发现带有事务=真选项的JMS组件不能很好地与聚合器一起工作。我的路由是事务的,直到它到达聚合器,在聚合器之后,我的路由不再是事务的。如果我理解得很好,这是因为聚合器为每个交换转换启动新线程,这种行为停止了第一个事务线程,这导致事务提交和ack发送到队列。所以消息不再在队列中。这是正确的吗?

我用Camel需要做的是从一个队列(RabbitMQ)中读取所有消息,然后将它们全部转换到一个列表中,最后将列表中的数据写入文件。所有这些都必须是事务性的,如果在路由中发生了一些错误,消息应该留在队列中。基本上,到目前为止我所做的是用jms组件从队列中读取(使用选项transacted = true),然后用聚合器聚合所有消息,然后发送到文件。

我的代码的简短示例:

from("jms:queue:someQUeue?transacted=true")
    // some more processing in the route                          <- route is transactional here
    .aggregate((constant(true)), new MyAggregationStrategy())
    .completionInterval(500)
    .process(new Processor() {                                    <- route is not transactional anymore
               // some processing
    })
    .toD("file://C/tmp...")

我认为最完美的组件是简单的JMS批处理,但是我们使用的是骆驼3.8,这个组件在这个版本和更新的版本中不再存在。为什么?有什么新的东西代替了这个吗?

SJMS和SJMS2也帮不了我,当我使用它们时,消费者不需要读取所有消息(队列中的所有消息都被解除锁定-等待被锁定),但是通过路由的处理仍然是一个接一个的消息。我如何使这成为一个交换,列出所有消息?

有没有其他的解决方法?(例如,创建一些自定义聚合器——但是如何实现呢?)

共有1个答案

燕玉堂
2023-03-14

据我所知,这是正确的!如果您的意图是实现保证交付,在这种情况下,您最好使用持久聚合存储库。

 类似资料:
  • 我已经配置了一个路由来从交易所中提取一些数据并聚合它们;这是简单的总结: 问题是聚合完成永远不起作用,例如,这是我的测试示例: ReflelctionTestUtils.setField;ReflectionTestUtils.setFiled;producerTemplate.send(FingerprintHistoryRouteBuilder.FINGERPRINT_HISTORY_ENDP

  • 目前我们在Drools Camel Server 5.5.0;我们想升级到新版本。当我检查Drools下载页面时,它显示6.4是最新的,并且没有Drools Camel服务器版本。我发现为KIE执行服务器提供的描述与drools Camel Server特性相似。Drools服务器是否重命名为KIE执行服务器?

  • 我对骆驼很陌生,如果这很明显,请原谅。 我们正在尝试设置一条骆驼路线(在 talend esb 中),它执行以下操作: < li >通过JMS接收消息 < li >数据库更新 < li >通过JMS使用请求/回复将消息发送到另一个系统 < li >使用回复中的信息进行另一次数据库更新 这一切都在一条路线上。我发现该路由不再接受 1 中的任何消息。当它正在等待 3 中的回复时。 我曾尝试在JMS组件

  • 我无法使用ApacheCamel和wildfly对JMS消息使用xquery。 我的代码从jms队列中读取并尝试过滤消息 当我运行带有消息

  • 我有一个从JMS队列读取项目并将其写入数据库的路径。 我已经阅读了关于ApacheCamelJMS组件的文档,但我没有得到我的问题的确切和明确的答案,即“如果路由中出现异常,JMS消费者是否会重新插入项目或解锁JMS队列中的消息?”。 谢谢 阿里

  • 我将我的Fabric8 Spring Boot Camel pom.xml升级到使用Camel 2.16.0,但并非所有组件都在2.16.0中可用 我不得不将以下组件保留在2.15.3,因为我得到了2.16.0版本的“丢失项目”: 骆驼指标 骆驼jsonpath 骆驼Spring靴 这些在Camel 2.16.0中不可用吗? 我使用的是Fabric8版本2.2.46和Spring Boot版本1.