簡體   English   中英

Apache Camel?transacted = true

[英]Apache Camel ?transacted=true

嗨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 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();
}

顯而易見,我已經配置了事務處理的使用者。 1test.queue。 當我運行它時,在日志中看到:

[main]信息org.apache.camel.impl.DefaultCamelContext-路由:route1已啟動,並且使用於:amqp:// queue:1test.queue?transacted = true
[AmqpProvider:(1):[amqp:HOST2]]信息org.apache.qpid.jms.sasl.SaslMechanismFinder-SASL身份驗證的最佳匹配是:SASL-PLAIN
[AmqpProvider:(1):[amqp:HOST2]] INFO org.apache.qpid.jms.JmsConnection-連接ID:...:1已連接到遠程Broker:amqp:HOST2
[AmqpProvider:(2):[amqp:HOST2]]信息org.apache.qpid.jms.sasl.SaslMechanismFinder-SASL身份驗證的最佳匹配是:SASL-PLAIN
[AmqpProvider:(2):[amqp:HOST2]] INFO org.apache.qpid.jms.JmsConnection-連接ID:...:2已連接到遠程代理:amqp:HOST2
[AmqpProvider:(3):[amqp:HOST2]]信息org.apache.qpid.jms.sasl.SaslMechanismFinder-SASL身份驗證的最佳匹配是:SASL-PLAIN
[AmqpProvider:(3):[amqp:HOST2]]信息org.apache.qpid.jms.JmsConnection-連接ID:...:3已連接到遠程代理:amqp:HOST2

如果我從消費者中刪除?transacted = true

[AmqpProvider:(1):[amqp:HOST2]]信息org.apache.qpid.jms.sasl.SaslMechanismFinder-SASL身份驗證的最佳匹配是:SASL-PLAIN
[AmqpProvider:(1):[amqp:HOST2]] INFO org.apache.qpid.jms.JmsConnection-連接ID:...:1已連接到遠程Broker:amqp:HOST2

它只出現一次。

如何解釋這種行為? 這通常是給駱駝交易的消費者嗎?

謝謝。

PS檢查了此主題,但不確定如何將其映射到Camel現實。

AMQP Camel Component尚未定義池化連接工廠,因此它將為每次迭代創建一個新連接以檢查代理中是否有消息。

為了避免這種情況,您應該將AMQPComponent的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 Camel Component相同的行為。

AMQP駱駝組件頁面上的更多信息

使用由amqp插入的jms。

我有類似的問題。 但是,當我使用JMS代替AMQP時,它運行良好,只有一次日志,即創建了單個連接。

似乎AMQ組件存在一些問題。

謝謝,拉胡爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM