我正在探索在 Web 应用程序中使用 Apache Camel 来执行一些集成模式。
我发现的唯一例子是使用 Spring。
是否有不使用 Spring 的可用示例?
感谢任何帮助
我正在探索在 Web 应用程序中使用 Apache Camel 来执行一些集成模式。
我发现的唯一例子是使用 Spring。
是否有不使用 Spring 的可用示例?
感谢任何帮助
聚会迟到了,但想发布更新的回复。我最近创建了一个名为Harness的轻量级框架,它可以非常容易地在 Camel 中创建 Web 服务,而无需任何 Spring 依赖项。它具有几个漂亮的功能,包括:
将 Camel 对象即插即用插入到“线束”中,该线束提供路由创建、注册表管理和测试所需的样板代码。
用很少的代码快速创建新业务逻辑的能力。这是因为在 Camel 和 Harness 之间已经提供了您可能需要的大部分内容。
实施像 Guice 这样的 IoC 框架的好处,没有使用像 Guice 这样的 IoC 框架的臃肿。通过使用 *.properties 文件,应用程序可以注入模拟、不同的处理器,甚至重新连接业务逻辑。
一种在不关闭应用程序或影响应用程序可能正在执行的任何其他操作的情况下重新配置、删除甚至添加业务逻辑的方法。
可以在此处找到框架核心库。这是 Harness 文件以及一些辅助工具所在的位置。
参考实现可以在这里找到。这是一个功能齐全的 Camel 微服务,可以作为一个模板,让你的 Camel 骑行到达它需要去的地方。
一段时间以来,我一直想为此添加支持。但从来没有解决过它,或记录一张票。所以今天我记录了一张票https://issues.apache.org/jira/browse/CAMEL-5906所以最终在未来我们有一种使用 serlvet 监听器来引导 Camel 的方法。门票的更多细节。
非常简单,只需执行以下操作:
<display-name>My Web Application</display-name>
<!-- you can configure any of the properties on CamelContext, eg setName will be configured as below -->
<context-param>
<param-name>name</param-name>
<param-value>MyCamel</param-value>
</context-param>
<!-- location of Camel route xml files -->
<context-param>
<param-name>routeBuilder-MyRoute</param-name>
<!-- define the routes as a resource from the classpath by prefixing the value with classpath: -->
<!-- note: instead of using a XML file we can also define the routes in Java code in a RouteBuilder class -->
<param-value>classpath:camel-config.xml</param-value>
</context-param>
<!-- the listener that kick-starts Camel -->
<listener>
<listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class>
</listener>
<!-- Camel servlet used in the Camel application -->
<servlet>
<servlet-name>CamelServlet</servlet-name>
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
为此,您应该创建一个MyCamelContextInitialisingListener
实现的侦听器类javax.servlet.ServletContextListener
- 这将包含 Camel 初始化逻辑。
您在您的WEB-INF/web.xml
<web-app>
<listener>
<listener-class>com.cheese.MyCamelContextInitialisingListener</listener-class>
</listener>
<web-app>
侦听器将包含以下内容:
private CamelContext camelContext;
@Override
public void contextInitialized(ServletContextEvent sce) {
camelContext = new DefaultCamelContext();
camelContext.addRouteBuilder(new MyRouteBuilder());
camelContext.start();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
camelContext.stop()
}
该类MyRouteBuilder
将是RouteBuilder
您定义的实现,它使用 Camel Java DSL 来定义路由逻辑。
不需要弹簧。
Spring 通常用于将 Camel 上下文作为 bean 来保存。
随意使用 Camel,就像在托管 bean 的任何其他成员中一样。根据您的 web 应用程序中的架构,它可能比使用 spring 更棘手。
通常,您在 webapp 中创建或重用一些单例 bean(有不同的方法可以做到这一点,例如@Singleton
EJB,或一些 DI 框架,例如 GUICE(和 spring..)。然后只需使用骆驼上下文创建一个实例变量,例如CamelContext ctx; 然后在构造函数/单例构造函数中, ctx = new DefaultCamelContext();
您现在已经运行了骆驼,只需使用 Java DSL 继续向其添加组件和路由。无论如何,Camel 有几个组件是半依赖于 Spring 的。如JMS组件、Spring-WS等。此外,您可能很难在没有弹簧的情况下将 Camel 插入 servlet 容器。但这取决于您的用例。
在此处阅读有关上下文生命周期的信息 http://camel.apache.org/lifecycle.html