【问题标题】:apache camel "Jetty vs Servlet" in web applicationWeb应用程序中的apache骆驼“Jetty vs Servlet”
【发布时间】:2015-02-24 10:57:50
【问题描述】:

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

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

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

我相信骆驼有几种选择:

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

如果有人以前做过并且可以指导,那将非常有帮助。 任何诸如利弊之类的指针也很受欢迎。

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

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    Jetty 是从某个给定 URL 接收请求的最简单方法。

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

    【讨论】:

    • 在 Rest DSL 或任何非 servlet 实现中,保持骆驼上下文线程一直运行的建议方法是什么?
    • 这取决于你如何启动骆驼上下文 - 有很多选项,例如使用 MainSupport 类,在 spring 容器中,osgi,在 War 文件中,可能还有其他。 Redhat 会说使用 Fuse/OSGi,但这会给简单的应用程序带来很大的认知和应用程序开销。就我个人而言,我认为带有骆驼 MainSupport 类的罐子是要走的路。如果你需要在 tomcat 或其他东西上运行它,那么看看这个camel.apache.org/…(尽管你想避免春天,这可能不是最好的方法)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多