当前位置: 首页 > 知识库问答 >
问题:

Spring靴驼峰试验

徐卓
2023-03-14

我正在用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上下文。

如何强制不启动骆驼上下文。

共有3个答案

袁晟
2023-03-14

使用Camel 2.20.1解决了这个问题

郎言
2023-03-14

如果您使用的是旧版本的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>   
马峻
2023-03-14

在最新版本的骆驼中,有一个骆驼的自动启动选项。您可以通过添加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-