【问题标题】:Cannot set ActiveMQ destination option in Camel endpoint无法在 Camel 端点中设置 ActiveMQ 目标选项
【发布时间】:2016-01-15 14:03:25
【问题描述】:

我正在尝试在 Camel JMS (ActiveMQ) 使用者上设置预取策略。根据 Camel 文档 http://camel.apache.org/activemq.html#ActiveMQ-UsingActiveMQDestinationOptions,我应该可以通过将 ?destination.consumer.prefetchSize=1 添加到端点 URL 来做到这一点。

不幸的是,当我这样做时,我得到以下异常

Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: activemq://queue:ToSynchronize?destination.consumer.prefetchSize=1 due to: There are 1 parameters that couldn't be set on the endpoint. Check the uri if the parameters are spelt correctly and that they are properties of the endpoint. Unknown parameters=[{destination.consumer.prefetchSize=1}]
    at org.apache.camel.impl.DefaultComponent.validateParameters(DefaultComponent.java:183)
    at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:128)
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:558)
    ... 48 more

我有一个简单的路线构建器

@Component
public class IntegrationRout extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("activemq:queue:ToSynchronize?destination.consumer.prefetchSize=1")
            .unmarshal().jaxb("com.foo.jms.model")
            .beanRef("Service", "upload")
    }
}

Java 中的 Spring 配置(取自一些关于如何配置 JMS 事务客户端的教程)

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.foo"})
public class SynchronizationConfiguration extends CamelConfiguration {

    @Bean
    public ConnectionFactory jmsConnectionFactory() {
        return new ActiveMQConnectionFactory("tcp://localhost:61616");
    }

    @Bean
    @Autowired
    public PlatformTransactionManager jmsTransactionManager(final ConnectionFactory jmsConnectionFactory) {
        return new JmsTransactionManager(jmsConnectionFactory);
    }

    @Bean
    @Autowired
    public JmsComponent activemq(final ConnectionFactory jmsConnectionFactory, final PlatformTransactionManager jmsTransactionManager) {
        return JmsComponent.jmsComponentTransacted(jmsConnectionFactory, jmsTransactionManager);
    }
}

【问题讨论】:

    标签: java spring jms apache-camel activemq


    【解决方案1】:

    如果配置像?destination.consumer.prefetchSize=1 这样的ActiveMQ 目标选项,您必须明确使用ActiveMQComponent 类。使用一般的JmsComponent 是行不通的。

    所以你必须更换

        @Bean
        @Autowired
        public JmsComponent activemq(final ConnectionFactory jmsConnectionFactory, final PlatformTransactionManager jmsTransactionManager) {
            return JmsComponent.jmsComponentTransacted(jmsConnectionFactory, jmsTransactionManager);
        }
    

    类似的东西

        @Bean
        @Autowired
        public JmsComponent activemq(final ConnectionFactory jmsConnectionFactory, final PlatformTransactionManager jmsTransactionManager) {
            final ActiveMQComponent activemq = new ActiveMQComponent();
            activemq.setConnectionFactory(jmsConnectionFactory);
            activemq.setTransactionManager(jmsTransactionManager);
            activemq.setTransacted(true);
            return activemq;
        }
    

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2012-02-23
      • 2020-02-25
      • 2023-03-13
      • 1970-01-01
      • 2015-04-06
      相关资源
      最近更新 更多