apache camel“Jetty vs Servlet”在Web应用程序中

时间:2015-02-24 02:05:40

标签: apache-camel

在我们的项目中,我们计划使用apache camel进行Web请求路由/编排。

它基本上是一个与其他几个内部网络服务交谈的网络项目,以准备对请求者的最终响应。

有人可以建议,在骆驼网络应用程序中使用Web请求的最佳/标准方式是什么?

我相信它有可能在骆驼中有几种选择:

  • servlet-listenter + servlet组件组合
  • Jetty组件
  • spring web和xml(我们希望避免任何spring依赖
  • 任何其他方式???

如果有些人之前已经这样做并且可以指导,那将会非常有帮助。 任何有利有弊的指针也都很受欢迎。

注意:正如我上面提到的,我们不希望在项目中有任何与Spring相关的依赖项。

1 个答案:

答案 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");