我正在使用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有没有可能的解决方案?
谢谢
1条答案
按热度按时间vs91vp4v1#
此解决方案对我很有效: