Spring Boot Camel Route - получить данные из конечной точки отдыха - PullRequest
2 голосов
/ 22 марта 2019

Я хочу создать верблюжий маршрут в проекте Spring Boot (2.1.1), чтобы получить данные от некоторой (остальной) конечной точки (http://localhost:8080/getAllUsers)) и отправить эти данные в activeMq.

Я пытался с данными таймера отправить его на activeMq и использовать его, и он работает. Но у меня проблема со сбором данных с конечной точки.

Я пробовал несколько вещей, но безуспешно. Это то, что я пробовал.

В этом примере я не отправляю данные в ActiveMq, я просто хочу увидеть ответ ...

public void createNewRoute() {
CamelContext context = new DefaultCamelContext();

try {
  ProducerTemplate template = context.createProducerTemplate();
  context.start();

  Exchange exchange = template.request("http://localhost:8080/getAllUsers",
      new Processor() {
        public void process(Exchange exchange) throws Exception {
        }
      });

  if (null != exchange) {
    Message out = exchange.getOut();
    int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
    System.out.println("Response: " + String.valueOf(responseCode));
  }

  Thread.sleep(1000 * 3);
  context.stop();
} catch (Exception ex) {
  System.out.println("Exception: " + ex);
}

System.out.println("DONE!!");
 }

Другой маршрут:

 from("servlet://localhost:8080/getAllUsers").to("activemq://all-users");

И еще:

 rest("//localhost:8080/getAllUsers")
 .get().consumes("application/json")
 .to("activemq://all-users");

Ответы [ 3 ]

1 голос
/ 23 марта 2019

Компоненты http основаны на потоковой передаче, поэтому вы можете попросить Camel дать вам ответ в виде строки.

String s = exchange.getMessage().getBody(String.class);

Подробнее в этих ссылках

1 голос
/ 23 марта 2019

Я пойду с вашим вторым примером:

from("timer://test?repeatCount=1").routeId("newRoute")
    .streamCaching()
    .process(exchange -> exchange.getIn()
        .setBody(exchange.getIn()
            .getBody()))
    .marshal()
    .json(JsonLibrary.Jackson)
    .setHeader(Exchange.HTTP_METHOD, constant("GET"))
    .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
    .to("http://localhost:8080/getAllUsers")
    .log(LoggingLevel.INFO, "This is my body: ${body}")
    .to("activemq:queue://new-queue");

Это вызовет его один раз.

1 голос
/ 22 марта 2019

Попробуйте это без context.start () ....

   CamelContext camelContext = new DefaultCamelContext();
    ProducerTemplate template = camelContext.createProducerTemplate();

    Exchange exchange = template.send("http://localhost:8080/getAllUsers", new Processor() {
        public void process(Exchange exchange) throws Exception {}
    });

    Message out = exchange.getOut();   
...