在Web应用程序中使用Apache Camel而不使用Spring?

roejwanj  于 12个月前  发布在  Apache
关注(0)|答案(5)|浏览(130)

我正在探索在Web应用程序中使用Apache Camel来执行一些集成模式。
我发现的唯一的例子是使用Spring。
是否有不使用Spring的示例?
感谢任何帮助

1qczuiv0

1qczuiv01#

迟到的聚会,但想张贴一个更新的回应。我最近创建了一个轻量级框架,名为Harness,它使在Camel * 中创建Web服务变得非常容易,而不需要 * 任何Spring依赖项。它具有几个漂亮的功能,包括:

  • 将Camel对象即插即用地插入到“Harness”中,该“Harness”提供路由创建、注册表管理和测试所需的样板代码。
  • 能够用很少的代码快速创建新的业务逻辑。这是因为在Camel和Harness之间,您可能需要的大部分内容已经提供。
  • 实现像Guice这样的IoC框架的好处,而不是使用像Guice这样的IoC框架的膨胀。通过使用 *.properties文件,应用程序可以注入模拟、不同的处理器,甚至重新连接业务逻辑。
  • 一种重新配置、删除甚至添加业务逻辑的方法,而不会关闭应用程序或影响应用程序可能正在执行的任何其他操作。

框架核心库可以在here中找到。这是线束文件沿着一些辅助工具的位置。
参考实现可以在here中找到。这是一个功能齐全的Camel微服务,可以作为一个模板,让您的Camel骑行到需要去的地方。

  • 2017年7月更新 *

不久前,我写了一个不同的Camel微服务框架,名为k-car。源代码为here。这个版本比上一个版本简单,它使用Velocity和Maven从模板创建组件和服务。

hi3rlvi2

hi3rlvi22#

Spring通常用于将Camel上下文作为bean来保存。
可以像在托管bean的任何其他成员中一样随意使用Camel。这可能比使用spring要复杂一些,这取决于你的webapp的架构。
通常,您可以在webapp中创建或重用一些单例bean(有不同的方法可以做到这一点,例如@Singleton EJB,或一些DI框架,例如GUICE(和spring..)。然后只需创建一个带有camel上下文的示例变量,例如CamelContextctx; then in construcutor/singleton constructor,ctx = new DefaultCamelContext();
现在您已经运行了camel,只需继续使用JavaDSL向其添加组件和路由。Camel有几个组件是半依赖于Spring的。例如JMS组件、Spring-WS等。此外,在没有spring的情况下将Camel装入servlet容器可能会遇到一些棘手的问题。但这取决于您的用例。
在此处阅读上下文生命周期http://camel.apache.org/lifecycle.html

c7rzv4ha

c7rzv4ha3#

我想为这一点提供支持已经有一段时间了。但从来没有这样做过,也没有开过罚单。所以今天我记录了一个ticket https://issues.apache.org/jira/browse/CAMEL-5906,所以最终在未来我们有一种使用serlvet侦听器引导Camel的方法。更多关于门票的细节

t5fffqht

t5fffqht4#

为此,您应该创建一个实现javax.servlet.ServletContextListener的侦听器类MyCamelContextInitialisingListener-这将包含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实现,它使用CamelJavaDSL来定义路由逻辑。
不需要Spring。

rm5edbpk

rm5edbpk5#

很简单,只需执行以下操作:

<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>

相关问题