在我们的项目中,我们计划使用apache camel进行Web请求路由/编排。
它基本上是一个与其他几个内部网络服务交谈的网络项目,以准备对请求者的最终响应。
有人可以建议,在骆驼网络应用程序中使用Web请求的最佳/标准方式是什么?
我相信它有可能在骆驼中有几种选择:
如果有些人之前已经这样做并且可以指导,那将会非常有帮助。 任何有利有弊的指针也都很受欢迎。
注意:正如我上面提到的,我们不希望在项目中有任何与Spring相关的依赖项。
答案 0 :(得分:3)
Jetty是从某个给定网址接收请求的最简单方法。
from("jetty:http://localhost:{{port}}/myapp/myservice")
.process() // do something with the Exchange
这很容易运行,但是你最终可能会遇到一些棘手的路由规则来区分GET,POST等。恕我直言的骆驼路线中的多条执行路径(即分裂,选择等)可能/将成为不谨慎的陷阱。
Servlets比较棘手,因为你需要编写Servlet实现并在Servlet容器中注册它(例如通过web.xml),结果是相同的 - 你得到一个HTTP请求作为交换。
web.xml
<web-app>
<servlet>
<servlet-name>CamelServlet</servlet-name>
<display-name>Camel Http Transport Servlet</display-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CamelServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
RouteBuilder
from("servlet:///hello?matchOnUriPrefix=true").process(new Processor() {
// do stuff
我不认为这对码头组件有任何好处。
Camel Rest DSL是我的选择。它是一个简单的DSL,用于描述具有良好REST语义的HTTP端点,它清楚路由规则是什么,而且它相对简洁。这仅适用于2.14以后..
rest("/say")
.get("/hello").to("direct:hello")
.get("/bye").consumes("application/json").to("direct:bye")
.post("/bye").to("mock:update");
from("direct:hello")
.transform().constant("Hello World");
from("direct:bye")
.transform().constant("Bye World");