Apache Camel – Scala DSL的一个小例子

因此,我们在Apache Camel中拥有Scala DSL已有多年了,我想大概是在我写了一个有关此问题的博客条目的时候了(已经出现在我的待办事项列表上一段时间了)。

因此,Scala DSL当然是使用Scala编程语言的,它在纯Java上有很多花哨的地方。 但是,Scala DSL的普及率不是很高,因为Java和XML DSL对大多数人来说已经足够了。

无论如何,我想Scala DSL的优点之一就是使用闭包作为表达式和谓词等。因此,让我们使用Filter EIP模式做一个小例子,并使用闭包作为过滤谓词。

使用Scala DSL时,应使用org.apache.camel.scala.dsl.builder.RouteBuilder ,这是Scala支持的DSL。

因此,在下面的示例中,当我们定义createMyFilterRoute函数时,我们有一个FilterRoute类 ,在其中使用Scala DSL。

class FilterRoute {
  def createMyFilterRoute = new RouteBuilder {
    from("direct:start")
      .filter(_.in("gold") == "true")
        .to("mock:gold")
  }
}

从上面的代码中可以看到,在RouteBuilder范围内,我们可以使用Scala DSL。 然后,我们使用过滤器EIP ,该过滤器EIP接受带有Exchange作为参数的函数,该函数默认设置为_符号。 使用具有隐式类型转换器和大小写匹配等功能的Scala功能强大(但有点吓人)的类型系统,将该函数的结果作为谓词进行评估。

in(“ gold”)是我们在Scala DSL中包装的Exchange上的函数,该函数在Camel ExchangeRichExchange )上添加了其他方法,in是查找标头的函数。

为了对该路线进行单元测试,我想使用现有的功能强大的骆驼测试模块。 该模块提供了CamelTestSupport类,您可以为您的单元测试扩展该类。

因此,单元测试几乎可以像Java中的单元测试一样,但是您需要添加org.apache.camel.scala.dsl.RouteBuilderSupport特性,该特性有助于将Scala RouteBuilder与Java RouteBuilder桥接起来,而CamelTestSupport期望并使用该特性 。 下面的代码显示了一个单元测试示例。

class FilterRouteTest extends CamelTestSupport with RouteBuilderSupport {

  override def createRouteBuilder() = new FilterRoute().createMyFilterRoute

  @Test
  def testFilterRouteGold() {
    getMockEndpoint("mock:gold").expectedMessageCount(1)
    template.sendBodyAndHeader("direct:start", "Hello World", "gold", "true")
    assertMockEndpointsSatisfied()
  }

  @Test
  def testFilterRouteNotGold() {
    getMockEndpoint("mock:gold").expectedMessageCount(0)
    template.sendBodyAndHeader("direct:start", "Hello World", "gold", "false")
    assertMockEndpointsSatisfied()
  }

}

如您所见,我们使用RouteBuilderSupport特性,然后重写createRouteBuilder函数以返回之前创建的具有Scala DSL功能的RouteBuilder。 其余代码是带有JUnit @Test批注的标准普通Java代码。

作为单元测试的一部分,该示例在camel-scala模块的源代码中提供。

如果您是Scala的粉丝并且也对Camel感兴趣,那么Camel社区可以使用专门致力于Scala并帮助Scala DSL的人员 。 骆驼队经常忙于生活中的其他问题,因此我们只有一点时间可以和Scala一起玩耍。

参考: Apache Camel –我们的JCG合作伙伴提供的 Scala DSL示例   克劳斯·易卜生( Claus Ibsen)在Apache Camel博客上的克劳斯·易卜生( Claus Ibsen)


翻译自: https://www.javacodegeeks.com/2012/02/apache-camel-little-scala-dsl-example.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值