我正在探索在Web应用程序中使用Apache Camel来做一些集成模式。
我发现的唯一例子是使用Spring。
有没有使用Spring的样品?
感谢任何帮助
答案 0 :(得分:3)
迟到了聚会,但想发布更新的回复。我最近创建了一个名为 Harness 的轻量级框架,该框架使在Camel 中创建Web服务变得非常容易,而无需任何Spring依赖项。它具有一些漂亮的功能,包括:
将Camel对象即插即用地插入“线束”,该线束提供了路由创建,注册表管理和测试所需的样板代码。
使用很少的代码即可快速创建新业务逻辑的能力。这是因为在Camel和Harness之间已经提供了您可能需要的大多数东西。
实现类似Guice的IoC框架的好处,而不必使用像Guice这样的IoC框架。通过使用* .properties文件,该应用程序可以注入模拟,不同的处理器,甚至可以重新连接业务逻辑。
一种重新配置,删除甚至添加业务逻辑的方法,而无需关闭应用程序或影响应用程序可能做的任何其他事情。
可以在here中找到框架核心库。这是Harness文件以及一些辅助工具的地方。
参考实现here。这是功能齐全的Camel微服务,可以用作将Camel骑到需要去的地方的模板。
答案 1 :(得分:1)
Spring通常用于将Camel上下文保存为bean。
随意使用Camel,就像在托管bean的任何其他成员中一样。根据您在webapp中使用的架构,它可能比使用spring更有点琐碎。
通常,您在webapp中创建或重用一些单独的bean(有不同的方法可以做到这一点,例如@Singleton
EJB,或者某些DI框架,例如GUICE(和spring ..)。
然后用CamelContext ctx创建一个带有驼峰上下文的实例变量;然后在construcutor / singleton构造函数中,ctx = new DefaultCamelContext();
您现在已经运行了camel,只需使用Java DSL继续添加组件和路由。 Camel的几个组件无论如何都是半依赖Spring的。例如JMS组件,Spring-WS等。此外,您可能有一个棘手的时间将Camel插入没有弹簧的servlet容器中。但这取决于你拥有它的用例。
在此处阅读上下文生命周期 http://camel.apache.org/lifecycle.html
答案 2 :(得分:1)
我想暂时添加对此的支持。但从来没有绕过它,或记录一张票。所以今天我记录了一张票https://issues.apache.org/jira/browse/CAMEL-5906,所以最后我们有一种方法可以使用一个serlvet监听器来引导Camel。关于门票的更多细节。
答案 3 :(得分:1)
为了做到这一点,你应该创建一个实现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来定义路由逻辑。
不需要弹簧。
答案 4 :(得分:1)
非常简单,只需执行以下操作:
<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>