Java Apache Camel?事务处理=真
嗨,Camel/jms开发人员。 使用Apache Camel amqp jms连接器。作为经纪人ActiveMQ 我的配置是默认的 以下是消费者代码示例:Java Apache Camel?事务处理=真,java,apache-camel,jms,activemq,amqp,Java,Apache Camel,Jms,Activemq,Amqp,嗨,Camel/jms开发人员。 使用Apache Camel amqp jms连接器。作为经纪人ActiveMQ 我的配置是默认的 以下是消费者代码示例: public static void main(String[] args) throws Exception { AMQPComponent amqpComponent = AMQPComponent.amqpComponent(HOST, USER, PWD); CamelContext context = new D
public static void main(String[] args) throws Exception {
AMQPComponent amqpComponent = AMQPComponent.amqpComponent(HOST, USER, PWD);
CamelContext context = new DefaultCamelContext();
context.addComponent("amqp", amqpComponent);
context.start();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("amqp:queue:1test.queue?transacted=true")
.to("stream:out")
.end();
}
});
Thread.sleep(20*1000);
context.stop();
}
很容易看到,我已经配置了Transact-consumer。对于1测试队列。
当我运行它时,请在日志中查看:
[main]INFO org.apache.camel.impl.DefaultCamelContext-路由:route1从以下位置启动和使用:amqp://queue:1test.queue?transacted=true [AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.sasl.SaslMechanismFinder-sasl验证的最佳匹配为:sasl-PLAIN
[AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.JmsConnection-连接ID:…:1连接到远程代理:amqp:HOST2
[AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.sasl.SaslMechanismFinder-sasl验证的最佳匹配为:sasl-PLAIN
[AmqpProvider:(2):[amqp:HOST2]]INFO org.apache.qpid.jms.JmsConnection-连接ID:…:2连接到远程代理:amqp:HOST2
[AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.sasl.SaslMechanismFinder-sasl验证的最佳匹配为:sasl-PLAIN
[AmqpProvider:(3):[amqp:HOST2]]INFO org.apache.qpid.jms.JmsConnection-连接ID:…:3连接到远程代理:amqp:HOST2 如果我从消费者中删除?Transact=true [AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.sasl.SaslMechanismFinder-sasl验证的最佳匹配为:sasl-PLAIN
[AmqpProvider:[amqp:HOST2]]INFO org.apache.qpid.jms.JmsConnection-连接ID:…:1连接到远程代理:amqp:HOST2 它只出现一次 如何解释这种行为?这通常适用于骆驼中的交易消费者 多谢各位
p.S已检查,但不确定如何将其映射到骆驼现实。使用jms代替amqp 我也有类似的问题。但是当我使用JMS而不是AMQP时,它工作得很好,只创建了一次日志,即单个连接 似乎AMQ组件存在一些问题 谢谢,
RahulAMQP Camel组件尚未定义池连接工厂,因此它正在为每次迭代创建一个新连接,以检查代理中是否有消息 要避免这种情况,应将AMQP组件的CachingConnectionFactory定义为:
import org.apache.camel.component.amqp.AMQPComponent;
import org.apache.camel.component.jms.JmsConfiguration;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.jms.connection.CachingConnectionFactory;
@Bean
public JmsConnectionFactory jmsConnectionFactory() {
JmsConnectionFactory jmsConnectionFactory = new JmsConnectionFactory(brokerUser, brokerPassword, brokerUrl);
return jmsConnectionFactory;
}
@Bean
@Primary
public CachingConnectionFactory jmsCachingConnectionFactory(JmsConnectionFactory jmsConnectionFactory) {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(jmsConnectionFactory);
return cachingConnectionFactory;
}
@Bean
public JmsConfiguration jmsConfig(CachingConnectionFactory cachingConnectionFactory) {
JmsConfiguration jmsConfiguration = new JmsConfiguration();
jmsConfiguration.setConnectionFactory(cachingConnectionFactory);
jmsConfiguration.setCacheLevelName("CACHE_CONSUMER");
return jmsConfiguration;
}
@Bean
public AMQPComponent amqpComponent(JmsConfiguration jmsConfiguration) {
AMQPComponent amqpComponent = new AMQPComponent();
amqpComponent.setConfiguration(jmsConfiguration);
return amqpComponent;
}
您将获得与JMS驼峰组件相同的行为
更多信息请参见第页