Apache camel “阿帕奇骆驼”;Jetty vs Servlet“;在web应用程序中

Apache camel “阿帕奇骆驼”;Jetty vs Servlet“;在web应用程序中,apache-camel,Apache Camel,在我们的项目中,我们计划使用ApacheCamel进行web请求路由/编排 它基本上是一个web项目,与其他几个内部web服务对话,以准备对请求者的最终响应 有人可以建议,在camel web应用程序中使用web请求的最佳/标准方法是什么 我相信骆驼有多种选择: servlet Listener+servlet组件组合 码头构件 SpringWeb和xml(我们希望避免任何spring依赖) 还有别的办法吗 如果有人曾经这样做过,并且能够提供指导,这将非常有帮助。 任何像赞成和反对这样的建议

在我们的项目中,我们计划使用ApacheCamel进行web请求路由/编排

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

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

我相信骆驼有多种选择:

  • servlet Listener+servlet组件组合
  • 码头构件
  • SpringWeb和xml(我们希望避免任何spring依赖)
  • 还有别的办法吗
如果有人曾经这样做过,并且能够提供指导,这将非常有帮助。 任何像赞成和反对这样的建议都是值得赞赏的

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

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

from("jetty:http://localhost:{{port}}/myapp/myservice")
    .process() // do something with the Exchange
这很容易运行,但是您可能会使用一些复杂的路由规则来区分get、POST等。IMHO驼峰路线中的多条执行路径(即带有拆分、选择等)可能/将成为粗心者的陷阱

更复杂的是,您需要编写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

在Rest DSL或任何非servlet实现中,保持camel上下文线程始终运行的建议方法是什么?这取决于您如何启动camel上下文-有大量选项,例如在spring容器、osgi、War文件中使用MainSupport类,可能还有其他选项。Redhat会说使用Fuse/OSGi,但对于一个简单的应用来说,这会带来巨大的认知和应用开销。就我个人而言,我认为使用camel MainSupport类的jar是最好的选择。如果您需要在tomcat或其他软件上运行它,那么请看一下这个(尽管您希望避免使用spring,但这可能不是最好的方法)
       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");