Java apachecamel中的直通式处理

Java apachecamel中的直通式处理,java,jms,activemq,apache-camel,Java,Jms,Activemq,Apache Camel,我感兴趣的是找出在ApacheCamel中进行直通式处理的最佳方法 我可以在同一个JVM中启动几个不同的组件,这与我的activemq代理所在的位置不同。尝试将其设置为按顺序将消息从一个组件传递到下一个组件是否有意义?如何设置camel以确保在下一条消息启动之前,每条消息都会命中路由中的每个组件 更具体地说:我想通过配置我的brokerURI或其他东西来实现这一点。我看到了这一页:但我不确定在哪里/如何实现这些选项-optimizedDispatch似乎在处理broker destination

我感兴趣的是找出在ApacheCamel中进行直通式处理的最佳方法

我可以在同一个JVM中启动几个不同的组件,这与我的activemq代理所在的位置不同。尝试将其设置为按顺序将消息从一个组件传递到下一个组件是否有意义?如何设置camel以确保在下一条消息启动之前,每条消息都会命中路由中的每个组件

更具体地说:我想通过配置我的brokerURI或其他东西来实现这一点。我看到了这一页:但我不确定在哪里/如何实现这些选项-optimizedDispatch似乎在处理broker destinationPolicy选项


感谢

首先,在您的路由中明确配置从队列消费的单个消费者

所有连接的全局或全局

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="concurrentConsumers" value="1"/>
    <property name="maxConcurrentConsumers" value="1"/>
</bean>
然后,你有几个选择。通常,您可以使用管道模式在单个路由中的步骤之间(同步)传递消息。或用于在多个路由之间提供同步消息流

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConcumers=1")
    .to(<step1>)
    .to(<step2>)
    ...

所以它必须添加到消费者每次读取的队列中?无法为代理控件中的所有队列配置此选项?也可以全局配置此选项…我根据更新了答案在代理上设置这些异步和dispatchAsync选项如何?这对于直通式处理是必要的吗?我可以将其用于TCP传输吗?如果您的目标是减少线程并同步所有内容…那么您可以设置optimizedDispatch=true和dispatchAsync=false,等等,除非您有需要解决的特定线程问题/需求,否则通常不需要对其进行调优。如果您遵循我上面的示例,您将保证处理订单,因为只允许一个消费者。此外,如果需要更好的吞吐量,但仍然需要相关消息的排序,请考虑使用消息组(),它们提供了两个世界最好的信息。
from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConcumers=1")
    .to(<step1>)
    .to(<step2>)
    ...
from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConsumers=1")
    .to("direct:step1");

from("direct:step1")
    //perform step1 processing
    .to(direct:step2");

from("direct:step2")
    //perform step2 processing
    .to(direct:step3");
...