问题标签 [camel-jms]

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.

0 投票
1 回答
301 浏览

apache-camel - 骆驼activemq组件nosuchmethod异常

我正在使用 activemq 组件来发送/接收消息,但是当我 split() body() 时,我得到了以下异常。我使用的是骆驼 2.23.0 版本。有人可以建议什么问题吗?

这是导致此问题的路由示例:

如果我使用这种方式,我没有问题:

在 MyProcessor 内部,

例外:

0 投票
2 回答
468 浏览

java - 骆驼内部重新传递成功处理后如何防止来自MQ Broker的消息重新传递(事务骆驼路由)

我正在尝试使用 JPATransactionManager 运行 camel transacted() 路由(独立的 java 进程)是 spring PlatformTransactionManager (因为我希望骆驼路由在单个 DB 事务中运行)但我无法禁止从 MQ Broker 重新传递以防万一即使我在 onException 子句中使用了handled(true) 以及我的自定义重新交付策略(成功执行),事务方法也会失败。我只希望 MQ 在服务崩溃时重新交付。

在下面尝试但它不起作用:

  • 在 JMSComponent 配置中设置 setTransacted(false) 以防止骆驼 jms 运行是 transacted_session jms 模式,但它不起作用
  • doTry 和 doCatch 来自事务块的异常
  • 骆驼重新交付,然后是处理(真)。

    /li>
  • 我希望骆驼按照重新交付政策(工作)尝试重新交付,但 MQ 不应该重新交付。

  • 我希望我的骆驼路线在单个数据库事务中运行。
  • 我希望 MQ 代理仅在我的 java 服务在处理过程中崩溃时重新传递,这样我就不会丢失消息。
0 投票
1 回答
1098 浏览

apache-camel - 使用 Apache Camel ConsumerTemplate 从 ActiveMQ Artemis 轮询字节/大消息

通过 JMS 连接到 ActiveMQ Artemis 时,我在基于 Apache Camel 的应用程序中遇到问题。在 Camel 路由之一的末尾,消息存储在 Artemis JMS 队列中。在同一应用程序中运行的遗留组件会定期使用ConsumerTemplate.

这适用于带有纯文本正文的 Camel 消息,但在使用字节数组正文时会导致错误:似乎 Artemis 将任何带有字节正文的消息视为“大消息”,这些消息是流式传输的,而不是保存在内存中。通过ConsumerTemplate作品接收,但一旦访问正文或标题,就会引发如下异常:

对于不超过minLargeMessageSizeArtemis 的消息,在测试程序中甚至 3 个字节也会出现此问题。

巧合的是,在用于测试应用程序的独立应用程序中也出现了同样的问题。在那里,我能够通过保持 JMS 会话和接收器打开直到完全读取 JMS 消息正文和标头来解决问题。JmsTemplate使用 Camel,它在Camel 所基于的 Spring 中被抽象出来。


我查阅了Camel JMS 组件的用户文档,以找到可能对我有帮助的配置选项。我尝试了以下方法:

  • eagerLoadingOfProperties=true消费者方面:没有影响,只是似乎有影响MessageListenerContainer。文档说:

它使用 [...] Spring 的 JmsTemplate 进行发送,使用 MessageListenerContainer 进行消费。

但是,在调试时,它似乎MessageListenerContainer仅在使用 Camel 路由中来自 JMS 端点的消息时使用。在我的情况下使用ConsumerTemplatelikeJmsTemplate用于消费。

  • messageConverter在消费者方面mapJmsMessage:没有效果,它们在会话已经关闭时执行
  • alwaysCopyMessage在生产者方面:我认为复制可能会阻止使用流式大消息,没有效果
  • streamMessageTypeEnabled=false在生产者方面:没有影响
  • jmsMessageType=Bytes在生产者和消费者方面:没有影响
  • transferExchange=true在生产者和消费者方面:这似乎确实解决了我的具体情况,但感觉像是一种解决方法。文档建议谨慎使用该选项。

所以现在,这transferExchange似乎是我最好的选择,假设它真的解决了我在所有测试用例中的问题。不过,我很高兴能更好地理解这个问题或不同的解决方案:

  1. 为什么 Artemis 将小字节数组消息视为大消息?
  2. Camel ConsumerTemplate 是否完全支持流式大消息?

我的版本是 Camel 2.22.1 和 Artemis 2.10.1。


我已经能够通过修改 Camelcamel-example-cdi发布包中的 Camel 示例来重现我的问题,使其具有如下所示的最小类。此外,我添加了camel-jmsArtemis 依赖项并在本地启动了 Artemis,两者都如camel-example-artemis-large-messages示例中所述。

0 投票
2 回答
259 浏览

spring - Transacted Route 和 Transactional Endpoints,事务提交顺序

我的路线如下所示

from("jms:queue:IN_QUEUE) //(A) Transactional Endpoint .transacted("required") //(B) TX Policy with PROPAGATION_REQUIRED and JPATxManager .bean("someBean", "readFromDB()") //(C) Read from DB .bean("someBean", "writeToDB()") //(D) Write to DB .to("file:/home/src?fileName=demo_${id}.txt")

我知道 (A) 处的 JMS 消费者将在每次轮询时分出 JMS Transaction 并附加到线程。此外,(B)中的事务节点将在交换到达那里并附加到线程后分叉出 JPA 事务。

请在下面找到我的问题:

  1. 两个不同的事务可以附加到一个线程(如上面的那个)吗?
  2. 如果是,应该暂停哪一个?
  3. 上述路由的提交和回滚顺序应该是什么?

    注意:我没有从 Camel In Action 2nd Ed 书中找到任何明显的答案,所以请指导我

0 投票
0 回答
206 浏览

spring-boot - 迁移到 Camel 3 后发布 IBM MQ JMS 标头的问题

我正在使用使用 camel-cxf 配置的肥皂服务。消息被发送到 IBM MQ。当 JMS 消费者应用程序尝试将响应放入回复队列时,我收到以下异常。

仅在升级到骆驼 3.0.0 后才能看到以下异常

但是,在升级之前我没有看到这个问题,我使用的是 Camel 版本:2.22.0 CXF 版本:3.2.4 IBM MQ 版本:8.0.0.5

升级后 Camel 版本:3.0.0 CXF 版本:3.3.6 IBM MQ 版本:8.0.0.5

IBM MQ Server 版本没有任何变化,保持不变,为 8.0.0.5。

另外,当我检查特定错误时,我了解到此问题发生在低于 7 的 IBM MQ 版本中,并且在 7.5 版中已修复请参阅:PublishJMS 处理器无法将消息写入 IBM Websphere MQ

在我的用例中,当我如上所述降级骆驼版本时,请求-回复流程有效。

我是否应该手动将特定的 JMS 消息头添加到骆驼交换对象作为骆驼 3 的一部分,或者是我缺少的其他一些更改。请指教

异常堆栈

0 投票
1 回答
121 浏览

apache-camel - JMS 组件的桥接错误处理程序不起作用

根据 apache camel 的文档,JMS 组件支持与骆驼错误处理程序桥接,但是在执行时我得到“JMS 端点不支持 BridgeErrorHandler”。我检查了他们的源代码,发现在创建 jms 消费者时,检查了这个标志,如果发现为真,则会抛出 IllegalArgumentException 和上述消息。

任何人都可以在这方面帮助我吗?

注意:我使用的是 apache camel 3.0.0。

0 投票
3 回答
576 浏览

apache-camel - 带有“n”条回复消息的 Camel JMS 请求-回复

我正在使用 Camel JMS 组件进行请求-回复以与 MQ 进行通信。对于我的一些请求,我可以收到n条回复消息。如何汇总这些回复消息?

我想过使用聚合器模式和聚合策略,但不能使用它,因为我不确定可以回复的消息数量。

社区可以帮助我了解正确的方法吗?我做了一些谷歌搜索,但找不到有用的东西。以下是我的示例路线代码

期待从社区中获得一些好的见解。谢谢你。

0 投票
1 回答
80 浏览

apache-camel - 如何在 Camel JMS Route 中设置事务

如何在 JMS 路由中设置事务以在发生异常时回滚或不使用消息。下面是我的路线。MQ 是 ActiveMQ。

0 投票
2 回答
262 浏览

apache-camel - ActiveMQ 嵌入式桥接 Camel JMS 桥接

我有一个旧应用程序,它处理带有 ActiveMQ 5.8.0 的 JMS 消息和一些连接到这个 ActiveMQ 的 JNDI 远程主题。

我有一个这样的连接器:

它工作得很好,但是现在,由于某些技术原因(严格的 JMS 1.1),我需要使用“ConnectionFactory”而不是“TopicConnectionFactory”。在实际配置中,我被卡住了,因为 ActiveMQ 似乎使用“TopicConnectionFactory”而不是“ConnectionFactory”,而我的新类“MyConnectionFactoryImpl”现在实现了“ConnectionFactory”:

在“org.apache.activemq.network.jms.JmsConnector”类中,它到处使用“TopicConnectionFactory”,这在JMS 1.1 中不再推荐。

编辑:根据@Justin Bertram,我需要使用 Camel 而不是 ActiveMQ 嵌入式桥接器。但是我找不到任何可以用来替换我实际的两个 bean JMSConnector 的 XML 配置示例。保留我的 XML 配置文件的简单方法是什么?

0 投票
0 回答
46 浏览

apache-camel - Camel 3 - deadLetterChannel 的动态 uri

我正在尝试设置一个智能 JMS deadLetterChannel,其中动态计算 DLQ 的最终 uri,具体取决于原始队列名称(例如添加“.dead”后缀)。

我在文档中看到可以通过设置CamelJmsDestinationName标题来实现。

因此,我尝试了这个:

我为CamelJmsDestinationName尝试了许多不同的值:

  • “jms:队列:测试”
  • “队列:测试”
  • “测试”

但是它们都不起作用;标头被忽略,交换总是转到原始 uri(“queue:dummy”)。

我究竟做错了什么 ??

我正在使用绑定到Artemis ActiveMQ 代理的 Camel 3.6 和 camel-sjms2 组件: