Распространение значения параметра запроса в проекте Camel SpringBoot - PullRequest
3 голосов
/ 25 марта 2019

Здравствуйте, у меня есть проект Spring Boot 2, и я использую верблюда для маршрутов.

У меня есть конечная точка отдыха верблюда и маршрут верблюда:

 rest("/").produces("application/json")
.get("hello")
.param().name("url").type(RestParamType.query)
.dataType("String").endParam()
.to("direct:hello");
/////////////////////////////////////////////    
  System.out.println("starterd");
boolean startupRoute = true;
from("direct:hello").autoStartup(startupRoute)
    .tracing()
    .streamCaching()
    .process(exchange -> exchange.getIn()
        .setBody(exchange.getIn()
            .getBody()))
    .convertBodyTo(String.class)
    .marshal()
    .json(JsonLibrary.Jackson)
    .setHeader("Content-Type", constant("application/json"))
    .setHeader("Accept", constant("application/json"))
    .setHeader(Exchange.HTTP_METHOD, constant("GET"))
    .setHeader(Exchange.HTTP_URI).header("url")
    .log(LoggingLevel.INFO, "${body}")
    .removeHeader(Exchange.HTTP_PATH)
    .to("http4://url")
    .log(LoggingLevel.INFO, "This is my body: ${body}")
    .to("activemq://hello?exchangePattern=InOnly");
System.out.println("finished");

Что я хочу сделатькогда я отправляю запрос следующим образом:

http://localhost:8080/camel/hello/?url=http://localhost:8081/hi

Значение url, которое должно быть установлено в первом .to () в маршруте:

.to ("{url}? BridgeEndpoint = true")

Я также пытался использовать контроллер пружинной загрузки, но у меня все еще есть проблемы с получением значения параметрав .to ($ {url}

@GetMapping(value = "/finally")
  public String sendFromEndpointToActiveMq(@RequestParam(value = "url") String url) throws Exception {

  producerTemplate.sendBody("direct:hello", url);

return "done";

РЕДАКТИРОВАТЬ: я редактировал маршрут

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Попробуйте с этим

System.out.println("starterd");
boolean startupRoute = true;
from("direct:hello").autoStartup(startupRoute)
    .tracing()
    .streamCaching()
    .process(exchange -> exchange.getIn()
        .setBody(exchange.getIn()
            .getBody()))
    .convertBodyTo(String.class)
    .marshal()
    .json(JsonLibrary.Jackson)
    .setHeader("Content-Type", constant("application/json"))
    .setHeader("Accept", constant("application/json"))
    .setHeader(Exchange.HTTP_METHOD, constant("GET"))
    .setHeader(Exchange.HTTP_URI)
    .header("url")
    .log(LoggingLevel.INFO, "${body}")
    .removeHeader(Exchange.HTTP_PATH)
    .to("http4://url")
    .to("direct:hi");

from("direct:hi").log(LoggingLevel.INFO, "This is my body: ${body}")
    .recipientList(simple("activemq://${header.activemq}"+"?exchangePattern=InOnly"));
System.out.println("finished");
1 голос
/ 25 марта 2019

Вы должны использовать компонент http http://camel.apache.org/http4.html

Вы можете переопределить URI конечной точки HTTP, добавив заголовок с ключом Exchange.HTTP_URI к сообщению

.setHeader(Exchange.HTTP_URI).header("url")
.to("http4://dummy")
...