Apache camel 使用ApacheCamel和AMQ Artemis处理大型消息

Apache camel 使用ApacheCamel和AMQ Artemis处理大型消息,apache-camel,activemq-artemis,Apache Camel,Activemq Artemis,当我在AMQ Artemis队列中收到一条大消息(100KiB+)并尝试将此消息路由到另一个AMQ,并且此消息具有属性\u AMQ\u large\u SIZE时,我收到以下错误: 14:38:56.250 [Camel (CamelTestRoute) thread #1 - JmsConsumer[QUEUE.TEST]] WARN o.a.c.c.jms.EndpointMessageListener - Execution of JMS message listener failed.

当我在AMQ Artemis队列中收到一条大消息(100KiB+)并尝试将此消息路由到另一个AMQ,并且此消息具有属性
\u AMQ\u large\u SIZE
时,我收到以下错误:

14:38:56.250 [Camel (CamelTestRoute) thread #1 - JmsConsumer[QUEUE.TEST]] WARN  o.a.c.c.jms.EndpointMessageListener - Execution of JMS message listener failed. Caused by: [org.apache.camel.RuntimeCamelException - javax.jms.JMSRuntimeException: Invalid address QUEUE.TEST]
org.apache.camel.RuntimeCamelException: javax.jms.JMSRuntimeException: Invalid address QUEUE.TEST
我知道如果在AMQ中发布消息的连接工厂中设置属性
minLargeMessageSize
,则不会发生此问题

问题是,我无法控制创建连接工厂的代码,有时它们无法设置大消息大小属性

有没有一种方法可以让我的连接工厂来处理这个问题

*编辑

16:33:03.836[Camel(CamelTestRoute)线程#1-JmsConsumer[QUEUE.TEST]]警告o.a.c.c.jms.EndpointMessageListener-执行jms消息侦听器失败。原因:[org.apache.camel.runtimecameleexception-javax.jms.JMSRuntimeException:无效地址队列.TEST]
org.apache.camel.runtimecameleexception:javax.jms.JMSRuntimeException:Invalid address QUEUE.TEST
位于org.apache.camel.util.ObjectHelper.wrapunTimeCamelException(ObjectHelper.java:1830)
位于org.apache.camel.component.jms.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:196)
位于org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:117)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:719)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:679)
位于org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:649)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317)
位于org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1168)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1160)
位于org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1057)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
原因:javax.jms.JMSRuntimeException:无效地址QUEUE.TEST
位于org.apache.activemq.artemis.jms.client.ActiveMQDestination.fromAddress(ActiveMQDestination.java:119)
位于org.apache.activemq.artemis.jms.client.ActiveMQMessage.getJMSDestination(ActiveMQMessage.java:386)
位于org.apache.camel.component.jms.jmsbind.extractHeadersFromJms(jmsbind.java:187)
位于org.apache.camel.component.jms.JmsMessage.populateInitialHeaders(JmsMessage.java:229)
位于org.apache.camel.impl.DefaultMessage.createHeaders(DefaultMessage.java:257)
位于org.apache.camel.component.jms.JmsMessage.ensureInitialHeaders(JmsMessage.java:214)
位于org.apache.camel.component.jms.JmsMessage.getHeader(JmsMessage.java:164)
位于org.apache.camel.impl.DefaultMessage.getHeader(DefaultMessage.java:93)
位于org.apache.camel.impl.DefaultUnitOfWork(DefaultUnitOfWork.java:115)
位于org.apache.camel.impl.MDCUnitOfWork(MDCUnitOfWork.java:54)
位于org.apache.camel.impl.DefaultUnitOfWorkFactory.createUnitOfWork(DefaultUnitOfWorkFactory.java:32)
位于org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.createUnitOfWork(CamelInternalProcessor.java:695)
位于org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.before(CamelInternalProcessor.java:663)
位于org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.before(CamelInternalProcessor.java:634)
位于org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:149)
位于org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
位于org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:113)
... 省略了11个公共框架

如果对Artemis 2.x代理使用Artemis 1.x客户端,则需要使用适当的
anycastPrefix
多播前缀配置客户端连接到的接收器,例如:

<acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;协议=核心、AMQP、STOMP、HORNETQ、MQTT、OPENWIRE;anycastPrefix=jms.queue。;multicastPrefix=jms.topic。;useEpoll=true;amqpCredits=1000;amqpLowCredits=300

javax.jms.JMSRuntimeException:Invalid address QUEUE.TEST
?是否有完整的堆栈跟踪?我在ActiveMQ Artemis代码库的任何地方都看不到这种特殊的措辞,所以我猜它来自Camel本身。您试图将消息路由到的另一个代理是什么?它也是ActiveMQ Artemis吗?嗨,Betram,是的,我有,我会更新这个问题。我认为错误也来自骆驼。是的,第二个代理是ActiveMQ Artemis,刚刚托管在另一个网络中。您使用的是哪个版本的ActiveMQ Artemis?AMQ Artemis版本:2.6.2 Apache Camel版本:2.20.0您确定使用的是ActiveMQ Artemis 2.6.2吗?查看ActiveMQDestination(引发异常的位置)的源与方法
fromAddress()
不对应。这向我表明你实际上在使用一个diff
<acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>