Apache Camel将地址rest与重定向地址连接起来

wtzytmuj  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(116)

我正在使用Apache Camel进行系统集成,但遇到了一个奇怪的URL链接问题,该问题仅在以下情况下才会发生:

  • 我公开了一个提供参数的REST服务
  • 我不使用处理器进行数据转换,而是使用bean

我使用Apache Camel和Sping Boot 以及 * netty 4-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,这是重定向,其余的被连接。
我做的第一个尝试是删除 to() bean,认为它是造成问题的原因,但结果没有改变。
所以我做了很多测试,我注意到如果我执行以下操作之一,异常不会发生:

  • 我没有使用bean,而是将逻辑移到了流程中。这样,我在Exchange对象中创建了一个新的 message out,并且重定向是正确的(至少这是我自己给出的解释)
.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一起工作,并且不会发生连接

为什么我会有这种行为异常?使用bean有没有可能的解决方案?
谢谢

vs91vp4v

vs91vp4v1#

此解决方案对我很有效:

from("direct-vm:consumeWs")
            .routeId("all-service-consume")
            .removeHeader(Exchange.HTTP_PATH)
            .removeHeader("CamelHttp*")

相关问题