如何在没有 XML 的情况下将 Camel 与 Spring 一起使用

问题描述 投票:0回答:3

我正在阅读《Camel in Action》第二版,它指导使用 Spring-Camel XML 命名空间配置将 Camel 嵌入到 Spring 中,自动发现定义为 Spring beans 的组件等。这是一个示例。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>org.apache.camel.example.spring</package>
  </camelContext>

  <!-- lets configure the default ActiveMQ broker URL -->
  <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=true"/>
      </bean>
    </property>
  </bean>

</beans>

如何在不使用 XML 配置而是使用 Spring Java 配置的情况下实现这一目标?

java spring apache-camel
3个回答
1
投票

请参阅来自camel的此文档。 请参阅 this 了解 Activemq 配置。

在此仅添加一个片段:

public class MyRouteConfiguration extends CamelConfiguration {

    @Autowire
    private MyRouteBuilder myRouteBuilder;

    @Autowire
    private MyAnotherRouteBuilder myAnotherRouteBuilder;

    @Override
    public List<RouteBuilder> routes() {
        return Arrays.asList(myRouteBuilder, myAnotherRouteBuilder);
    }
}

1
投票

在 Apache Camel 的 GitHub 存储库中 有一个 examples 目录

查看其中的 Spring Java 配置示例,这是您需要的最小示例。


0
投票

如果您想使用 Java 语法并让 Camel 发现您的 bean,那么您可以首先通过从方法返回它们来定义您的 bean,然后使用

@Bean
@Configuration
注释。对于您上面发布的 XML 示例,这将是这样的:

@Configuration
public class AppConfig {

    @Bean
    public JmsComponent jms() {
        ActiveMQConnectionFactory amqcf = new ActiveMQConnectionFactory();
        amqcf.setBrokerURL("vm://localhost?broker.persistent=false");

        JmsComponent jms = new JmsComponent();
        jms.setConnectionFactory(amqcf);

        return jms;
    }
}

您可以对路线使用类似的方法(使用

@Component
注释):

@Component
public class MyRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("timer:foo?period=5000")
                .setBody(simple("Customer"))
                .to("jms:queue:customers");
    }
}

然后将

@ComponentScan
添加到您的主类中,它可能看起来像这样(假设您使用的是普通 Spring,而不是 Spring Boot):

@Configuration
@ComponentScan
public class Application extends CamelConfiguration {

    public static void main(String[] args) throws Exception {
        //org.apache.camel.spring.javaconfig.Main
        Main main = new Main();
        main.setConfigClass(Application.class);
        main.run();
    }

    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.