Web 应用程序中的 apache camel "Jetty vs Servlet"
apache camel "Jetty vs Servlet" in web application
在我们的项目中,我们计划使用 apache camel 进行 Web 请求路由/编排。
它基本上是一个网络项目,与其他几个内部网络服务对话,以准备对请求者的最终响应。
有人可以建议,best/standard 在 camel 网络应用程序中使用网络请求的方式是什么?
我相信在骆驼中有多种选择是可能的:
- servlet-listenter + servlet组件组合
- Jetty 组件
- spring web 和 xml(我们希望避免任何 spring 依赖性)
- 还有其他方法吗???
如果有人曾经这样做过并且可以指导,那将是非常有帮助的。
任何诸如优缺点之类的指针也非常感谢。
注意:正如我上面提到的,我们不希望在项目中有任何spring相关的依赖项。
Jetty 是接收来自给定 URL 的请求的最简单方法。
from("jetty:http://localhost:{{port}}/myapp/myservice")
.process() // do something with the Exchange
这很容易获得 运行 但是您最终可能会使用一些棘手的路由规则来区分 GET、POST 等。恕我直言,骆驼路线中的多条执行路径(即拆分、选择等)can/will 成为粗心者的陷阱。
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 请求路由/编排。
它基本上是一个网络项目,与其他几个内部网络服务对话,以准备对请求者的最终响应。
有人可以建议,best/standard 在 camel 网络应用程序中使用网络请求的方式是什么?
我相信在骆驼中有多种选择是可能的:
- servlet-listenter + servlet组件组合
- Jetty 组件
- spring web 和 xml(我们希望避免任何 spring 依赖性)
- 还有其他方法吗???
如果有人曾经这样做过并且可以指导,那将是非常有帮助的。 任何诸如优缺点之类的指针也非常感谢。
注意:正如我上面提到的,我们不希望在项目中有任何spring相关的依赖项。
Jetty 是接收来自给定 URL 的请求的最简单方法。
from("jetty:http://localhost:{{port}}/myapp/myservice")
.process() // do something with the Exchange
这很容易获得 运行 但是您最终可能会使用一些棘手的路由规则来区分 GET、POST 等。恕我直言,骆驼路线中的多条执行路径(即拆分、选择等)can/will 成为粗心者的陷阱。
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");