我正在用Spring boot为Camel编写一个测试。下面是测试类的配置
@RunWith(CamelSpringBootRunner.class)
@SpringBootApplication
@ComponentScan(basePackages = ["example.test"])
@UseAdviceWith
@BootstrapWith(SpringBootTestContextBootstrapper)
@DirtiesContext
class RouteTest {
private static final Logger LOGGER = LoggerFactory.getLogger(RouteTest.class)
@Autowired ModelCamelContext camelContext
@Test
void "flow"() {
camelContext.getRouteDefinition(route.routeId).adviceWith(camelContext, new AdviceWithRouteBuilder() {
@Override
void configure() throws Exception {
}
}
LOGGER.info("IN TEST: ******* Camel Status: "+camelContext.getStatus())
}
我认为骆驼不应该被启动。但当我运行测试时,它已经开始了。
我注意到CamelSpringBootRunner确实在CamelSpringBootExecutionListener中启动了camel上下文。
如何强制不启动骆驼上下文。
使用Camel 2.20.1解决了这个问题
如果您使用的是旧版本的camel,那么AutoStart选项将不起作用,请尝试使用shouldStartContext。有时在设置shouldStartContext后启动camel不起作用,所以我在下面的示例中介绍了这项工作。尝试以下操作:
在从代码启动上下文之前,应手动设置StartContext:
((SpringCamelContext)camelContext).setShouldStartContext(true);
camelContext.start();
示例上下文:
<camel:camelContext id="ids.camel.context" shouldStartContext="false">
<!-- Queue endpoints. -->
<camel:endpoint id="defaultInQueue" uri="jms:queue:${default.in.queue.name}"/>
<camel:endpoint id="defaultOutQueue" uri="jms:queue:${default.out.queue.name}"/>
<!-- Route to send messages to IDS -->
<camel:route id="out" trace="true">
<camel:from uri="direct:sender"/>
<!-- Do not expect answer (fire and forget) -->
<camel:setExchangePattern pattern="InOnly"/>
<camel:to ref="defaultOutQueue"/>
</camel:route>
<!-- Route to receive -->
<camel:route id ="in" trace="true">
<camel:from ref="defaultInQueue"/>
<camel:to uri="bean:defaultTextAdapter?method=onMessage"/>
</camel:route>
</camel:camelContext>
在最新版本的骆驼中,有一个骆驼的自动启动选项。您可以通过添加autoStartup选项来实现您想要的。例如,下面的路由配置为autoStartup=false,以防止在Spring启动时Camel启动。
<camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false">
<route>
<from uri="direct:start"/>
<to uri="mock:result"/>
</route>
</camelContext>
您可以稍后通过调用其start方法手动启动Camel,如下所示:
ApplicationContext ac = ...
SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel");
// now start Camel manually
camel.start();
我不知道如何用ApacheCamel 3测试endpointrest。你能帮助我吗? 这是我的代码。散集一个xml到pojo,然后pojo到json并将其发送到外部服务“my.applications.url”。我需要模拟外部响应。我该怎么做?
没有“org.apache.camel.CamelContext”类型的合格bean可用:应至少有一个合格的自带候选bean。 依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}
关于ApacheCamel的简短问题。我有以下场景,其中我的服务器接收jms消息,然后转换为csv文件,然后插入DB。为此,我有两个bean: xml2csv 我使用路由像: 当"路由"一个文件从-到,它是移动像一个消息?或者把问题放在不同的地方,ApacheCamel是否获取一个文件,将其包装为消息,并将其路由到bean或组件? 我的理解是正确的还是错误的。
我一直在尝试为Spring引导Kafka骆驼Avro消费者寻找示例代码,但没有运气。我在以下URL找到了Spring Camel Kafka消费者和生产者示例: https://thysmichels.com/2015/09/04/apache-camel-kafka-spring-integration/ 我的具体问题是,一旦我的bean从Avro模式创建,并且我有了POJO类,我如何将上面的c
如果这是个愚蠢的问题,请原谅。骆驼洞对我来说是新鲜事,所以我真的没有“全球视野”。我喜欢在camel安装中使用队列。我发现ActiveMQ是一个解决方案,然后偶然发现了两个不同的组件(或uri):ActiveMQ和JMS。 由于ActiveMQ正在实现JMS 1.1,使用这两种URI有什么区别?或者换句话说:我可以同时使用这两种方法吗?如果可以,在哪些情况下应该使用哪一种?
我有一个Spring Boot2.25.1应用程序,它使用Camel 2.25.1与camel-kafka,一切都正常工作…在我的Kafka消费者中,我需要添加该功能以按需暂停消费,因此我升级到camel 3.18.1,以便我可以使用可暂停功能。升级到3.18.1后,我收到错误FileNotes与类文件TimeoutAwareAggregationStategy.class. 当我打开camel-