java - 在现有 Spring Boot 应用程序中使用 Camel 和 Jetty Server

标签 java apache-camel

我们在嵌入式 jetty 服务器中部署了一个 spring-boot 应用程序,监听端口 X。现在我通过定义路由将 Apache Camel 集成到这个现有应用程序中。 目标是将少数休息端点移至将代理至其他服务的 Camel 路线。我无法理解以下内容

  • 当我使用“jetty: http://localhost:Y/myapp”作为路由端点之一时。它工作正常,没有任何错误。这是否意味着 Camel 创建了自己的 jetty 实例?

  • 当我使用“jetty: http://localhost:X/myapp”时,它再次工作,并且没有给出地址 X 正在使用的错误

我想保持对jetty服务器配置的控制,让camel监听已经存在的休息端点。

最佳答案

如果您可以配置一个 servlet 映射来匹配所有需要重定向的路径(例如,像 foo/* 这样的路径总是被重定向),那么事情就非常简单了。如果这对您不起作用,我稍后会尝试编辑我的答案。

官方文档中的相关页面is here 。对您来说有趣的例子是使用 servlet component 的例子,因为您已经配置并运行了 servlet 容器 (Jetty)。

首先,需要配置Camel servlet。这取决于您现有的 servlet 的配置方式;例如,使用 web.xml 文件,添加:

<servlet>
  <servlet-name>CamelServlet</servlet-name>
  <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>CamelServlet</servlet-name>
  <url-pattern>/foo/*</url-pattern>
</servlet-mapping>

或者,如果您使用的是 spring-boot,则只需注册以下 bean:

@Bean
public ServletRegistrationBean servletRegistrationBean() {
    CamelHttpTransportServlet servlet = new CamelHttpTransportServlet("CamelServlet");
    servlet.setServletName();
    return new ServletRegistrationBean(servlet,"/foo/*");
}

无论如何,一旦您在 Jetty 实例中注册了 Camel servlet,您就可以使用 servlet 组件并重定向所有内容:

from("servlet:foo?matchOnUriPrefix=true")
.to("http4://new.com/foo?bridgeEndpoint=true&throwExceptionOnFailure=false");
  • http4HTTP4 component ,基于 Apache HTTPClient 4.x。 (如果需要,您仍然可以使用基于 HTTPClient 3.x 的 HTTP component)。
  • matchOnUriPrefix=true 将匹配通配符
  • bridgeEndpoint=true 表示我们充当代理
  • throwExceptionOnFailure=false 表示 new 服务器返回的错误将仅转发给调用者,而不由 Camel 处理。

http://old.com/foo/some/crazy/path/i/just/made/up 的请求应重定向到 http://new.com/foo/some/crazy/path/i/just/made/up(并且可能会导致来自 new.com 服务器的 404 错误,该错误将被简单地转发到初始来电者)。

关于java - 在现有 Spring Boot 应用程序中使用 Camel 和 Jetty Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089775/

相关文章:

elasticsearch - camel-elasticsearch 2.11.x不能远程工作吗?

java - 如何在运行时修改 Camel 端点

java - Apache Camel : FTP files with scheduler (close connection when directory is empty)

java - IE 和 Chrome 的 Cookie 问题(使用 java)

java - 搜索并排序对象列表

java - 在java数据模式中映射嵌套json

apache-camel - Camel HTTPComponent 选项与 HTTPEndpoint 选项

java - Camel : How to mock a route with two endpoints

java - Apache:Tomcat "any version".exe 或 .zip

java - Spring @Configuration 运行时注入(inject)