gpt4 book ai didi

java - 无法在 Camel 端点中设置 ActiveMQ 目标选项

转载 作者:行者123 更新时间:2023-12-01 10:34:59 27 4
gpt4 key购买 nike

我正在尝试在 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);
}
}

最佳答案

如果配置 ActiveMQ 目标选项,例如 ?destination.consumer.prefetchSize=1,您必须显式使用 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;
}

关于java - 无法在 Camel 端点中设置 ActiveMQ 目标选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com