我想通过我的应用程序公开3个api。模式如下:
似乎我不能用骆驼来做...
这就是我注册servlet 2的方式:
@Bean
public ServletRegistrationBean camelServletRegistrationBean() {
final CamelHttpTransportServlet camelServlet = new CamelHttpTransportServlet();
final ServletRegistrationBean servletBean = new ServletRegistrationBean(camelServlet, "/api/api1/*");
servletBean.setName("servlet2");
return servletBean;
}
public class Api1RestInputRoute extends RouteBuilder {
restConfiguration().component("servlet").componentProperty("servletName", "servlet2");
rest()
.consumes(MediaType.TEXT_PLAIN_VALUE)
.get("/health").to("log:api1");
}
public class Api2RestInputRoute extends RouteBuilder {
restConfiguration().component("servlet").componentProperty("servletName", "servlet3");
rest()
.consumes(MediaType.TEXT_PLAIN_VALUE)
.get("/health").to("log:api2");
}
看起来两个restConfigurations都在同一组件上设置了“ servletName”属性,并且第一个获胜。
我不想为Camel Servlet使用/ api / camel / api1 / ,/ api / camel / api2 / ...
我的Apache Camel版本是2.21.5
答案 0 :(得分:0)
有很多方法可以通过Apache Camel中的rest dsl提供配置。 因此,我花了很多时间进行调试,以发现(如果要使用多个servlet,则在2.21.5中)没有机会选择要使用的servlet。
问题在于,骆驼一方面仅支持一个唯一的“ servlet”组件,所以如果您添加“ servlet1” ServletComponent则无济于事,最后它仍将使用“ servlet”。
尽管您可以指定很多RestConfigurations,但将选择“ servlet”的唯一配置。
并且,如果您尝试使用RestEndpoint的查询部分,那么问题在于,使用正确设置的ServletName创建的ServletEndpoints无论如何都会与它们的uri冲突:“ servlet:/ health?httpMethodRestrict = GET”,因此您将只有一个...
对于REST,我需要切换到Spring:(