Использовать существующий http-сервер при весенней загрузке как конечную точку верблюда

У меня есть приложение для весенней загрузки, которое использует стартовую сеть для весенней загрузки. Это создает работающий экземпляр Tomcat и настраивает http-сервер, работающий на порту. В моем маршруте верблюда я хочу использовать этот http-сервер в качестве компонента для HTTP-запросов, но я не могу понять, как его использовать. Я вижу много примеров настройки экземпляра пристани и потребления с него, но тогда разве я не запустил бы два HTTP-сервера? Я хочу только одну. Я предполагаю, что http-сервер уже настроен автоматически, поскольку я могу использовать его с другим кодом Spring (например, RestController), и я также вижу, что он запускается в моих журналах загрузки Spring.

@Component
public class ExampleRoute extends RouteBuilder
{
    @Override
    public void configure() throws Exception
    {

        //@formatter:off

        from( <want to take in an http request here> )
            .log( LoggingLevel.INFO, log, "Hello World!" );

        //@formatter:on

    }
}

person Doug Saus    schedule 08.11.2016    source источник


Ответы (1)


Вот пример: https://github.com/camelinaction/camelinaction2/tree/master/chapter7/springboot-camel

Вы можете зарегистрировать ServletRegistrationBean, который настраивает сервлет Camel с помощью Spring Boot.

@Bean
ServletRegistrationBean camelServlet() {
    // use a @Bean to register the Camel servlet which we need to do
    // because we want to use the camel-servlet component for the Camel REST service
    ServletRegistrationBean mapping = new ServletRegistrationBean();
    mapping.setName("CamelServlet");
    mapping.setLoadOnStartup(1);
    // CamelHttpTransportServlet is the name of the Camel servlet to use
    mapping.setServlet(new CamelHttpTransportServlet());
    mapping.addUrlMappings("/camel/*");
    return mapping;
}

Однако для Camel 2.19 мы планируем сделать это проще и OOTB: https://issues.apache.org/jira/browse/CAMEL-10416

И тогда вы можете сделать

from("servlet:foo")
  .to("bean:foo");

Где URL-адрес HTTP для вызова этого маршрута Camel будет http:localhost:8080/camel/foo

person Claus Ibsen    schedule 09.11.2016
comment
Я пошел по пути сервлета, но не смог заставить его работать. Однако использование вашего @Bean выше ДЕЙСТВИТЕЛЬНО работало. В качестве отступления: оказывается, вы ДОЛЖНЫ дать ServletRegistrationBean имя, и это ДОЛЖНО быть CamelServlet, иначе он не будет работать (если я изменю его на MyCamelServlet, он не инициализируется). Это не было ясно из примеров и документации. - person Doug Saus; 09.11.2016
comment
Это имя должно совпадать с именем, которое вы найдете здесь в таблице: camel.apache.org/servlet - person Claus Ibsen; 10.11.2016