gpt4 book ai didi

java - 可以使用 Camel Servlet 实现多个 servlet 吗?

转载 作者:行者123 更新时间:2023-12-02 10:09:01 24 4
gpt4 key购买 nike

我想通过我的应用程序公开 3 个 api。模式如下:

  • /api/ui/*(由 Spring 处理)映射到 servlet 1
  • /api/api1/*(由 Camel 的 servlet 组件处理)映射到 servlet 2
  • /api/api2/*(由 Camel 的 servlet 组件处理)映射到 servlet 3

似乎我无法用 Camel 做到这一点...

这就是我注册 servlet 2 的方式:

@Bean
public ServletRegistrationBean camelServletRegistrationBean() {
final CamelHttpTransportServlet camelServlet = new CamelHttpTransportServlet();
final ServletRegistrationBean servletBean = new ServletRegistrationBean(camelServlet, "/api/api1/*");
servletBean.setName("servlet2");
return servletBean;
}

public class Api1RestInputRoute extends RouteBuilder {


restConfiguration().component("servlet").componentProperty("servletName", "servlet2");

rest()
.consumes(MediaType.TEXT_PLAIN_VALUE)
.get("/health").to("log:api1");
}

public class Api2RestInputRoute extends RouteBuilder {


restConfiguration().component("servlet").componentProperty("servletName", "servlet3");

rest()
.consumes(MediaType.TEXT_PLAIN_VALUE)
.get("/health").to("log:api2");
}

看起来两个restConfigurations都在同一个组件上设置了“servletName”属性,并且第一个获胜。

我不想为 Camel Servlet 使用/api/camel/api1/、/api/camel/api2/...

我的 Apache Camel 版本是 2.21.5

最佳答案

不确定它是否有效,但您可以尝试一下这种可能的解决方法:强制 Servlet 组件三个不同的实例,以便调用 setter 不会影响所有实例。

CDI 版本(但原则仍然适用于 Spring)

public class ServletFactory {  

@Produces
@ApplicationScoped
@Named("servlet1")
public ServletComponent propertiesComponent() {
ServletComponent component = new ServletComponent();
... // Customize instance here
return component;
}

@Produces
@ApplicationScoped
@Named("servlet2")
public ServletComponent propertiesComponent() {
ServletComponent component = new ServletComponent();
... // Customize instance here
return component;
}

@Produces
@ApplicationScoped
@Named("servlet3")
public ServletComponent propertiesComponent() {
ServletComponent component = new ServletComponent();
... // Customize instance here
return component;
}

当然,您必须引用正确的名称:

restConfiguration().component("servlet1")

关于java - 可以使用 Camel Servlet 实现多个 servlet 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127006/

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