gpt4 book ai didi

apache-camel - Web 应用程序中的 apache Camel "Jetty vs Servlet"

转载 作者:行者123 更新时间:2023-12-04 02:21:31 24 4
gpt4 key购买 nike

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

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

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

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

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

  • 如果有人以前这样做过并且可以指导,那将非常有帮助。
    任何像优点和缺点这样的指针也很受欢迎。

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

    最佳答案

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

    from("jetty:http://localhost:{{port}}/myapp/myservice")
    .process() // do something with the Exchange

    这很容易运行,但是您最终可能会遇到一些棘手的路由规则来区分 GET、POST 等。恕我直言, Camel route 的多条执行路径(即 split 、选择等)可以/将成为粗心大意的陷阱。

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

    关于apache-camel - Web 应用程序中的 apache Camel "Jetty vs Servlet",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687058/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com