Apache Camel объединяет остальные адреса с адресом перенаправления - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Apache Camel для системной интеграции, и у меня возникает странная проблема с URL-связью, которая возникает только при следующих условиях:

  • Я предоставляю службу REST, которая предоставляет параметры
  • Я не использую процессор для преобразования данных, но компоненты

Я использую Apache Camel с Spring Boot и компонент netty4-http для перенаправлений.Ниже приведен упрощенный пример, который создает аномалию:

@Component
public class TestRoute extends RouteBuilder {
     public void configure() throws Exception {
     getContext().getGlobalOptions().put("CamelJacksonEnableTypeConverter", "true");

                restConfiguration()
                    .host("localhost")
                    .port("8096")
                    .bindingMode(RestBindingMode.auto);

                 rest()
                    .get("/method/{param1}")    
                    // Same problem if i use from() instead route()
                    .route()    
                        .to("direct:some-operation")
                        .to("netty4-http://localhost:8080/another/service"); 
        }
    }


    @Component
    public class TestBean {

        @Consume(uri = "direct:some-operation")
        public String getStartProcess() {
            /* bean's operation */
            return "Hello";
        }

    }

Например, если я позвоню http://localhost:8096/method/dog,, я получу в результате то, что вызов будет перенаправлен на http://localhost:8080/another/service/method/dog,, которыйredirect и остальное объединяются.

Первая попытка, которую я предпринял, состояла в том, чтобы удалить bean-компонент to () , думая, что это создало проблему, но результат не изменился.

Итак, я сделал так много тестов и заметил, что аномалия не возникает, если я выполняю одну из следующих операций:

  • , вместо того, чтобы использовать бин, я перемещаю логику впроцесс.Таким образом, я создаю новое сообщение из в объекте обмена, и перенаправление является правильным (по крайней мере, это объяснение, которое я дал себе)

    .process(new Processor() {
    
        @Override
        public void process(Exchange exchange) throws Exception{
            /* same bean's operation */
            exchange.getOut().setBody("Hello");
    
        }
    }).to("netty4-http://localhost:8080/another/service");
    
  • ЕслиЯ выставляю вызов REST без параметров, затем как .get ("/ method"), он также работает с bean-компонентом, и конкатенация не происходит

Почему у меня это поведение аномально?Есть ли возможное решение с использованием бобов?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...