首页 > OOP语言 > 其它 > 正文

使用Mule ESB与Groovy编排RESTful服务
2012-08-22 18:07:59   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

Groovy MarkupBuilder的好处

OrderMapToMicroformat转换器完成了服务中的重头戏,而它是由Groovy的MarkupBuilder实现的。MarkupBuilder API提供了一种自然的方式生成兼容于特定微格式的XML实体:

<scripting:transformer name="OrderMapToMicroformat">
   <scripting:script engine="groovy"> <![CDATA[
     def writer = new StringWriter()
     def xml = new groovy.xml.MarkupBuilder(writer)
     xml.order(xmlns: 'urn:acme:order:3:1') {
      customerId(payload.clientId)
      productId(payload.productCode)
      quantity(payload.quantity)
     }
     result = writer.toString() ]]>
   </scripting:script>
</scripting:transformer>

注意map payload中的值是如何用于组装XML元素的:这里解决了一些不匹配的命名约定(比如将clientId转换为customerId)。

如你所期望的那样,该转换器产生了如下输入:

<order xmlns='urn:acme:order:3:1'>
   <customerId>123456</customerId>
   <productId>P987C</productId>
   <quantity>2</quantity>
</order>

除了正确的内容类型外都是订单的RESTful服务用于创建新资源所需的内容。

分析

现在我们来看一下负责异步分析订单创建结果并决定是否需要进一步进行编排的服务:

<service name="OrderCreationResultProcessor">
  <inbound>
   <inbound-endpoint ref="OrderCreationResultQueue" />
    <selective-consumer-router>
     <message-property-filter pattern="OrderPlaced=true" />
    </selective-consumer-router>
    <logging-catch-all-strategy />
  </inbound>
  <outbound>
   <pass-through-router>
    <outbound-endpoint ref="SuccessfulOrderQueue" />
   </pass-through-router>
  </outbound>
</service>

我们使用的选择性消费者(selective consumer)所接收的消息中一定要包含订单成功处理的头信息。如果该头信息为true,那就通过一个名为SuccessfulOrderQueue 的内存队列将该消息路由给第三个(也是最终的)服务,该服务会处理订单成功创建的消息。注意在这个例子中我们只是简单地将错误消息以日志的方式记录下来,但在实际应用中需要将错误消息发送给专门的队列以进行后续的分析或是及时的反馈。

相关热词搜索:

上一篇:基于WAS CE和Axis2开发Web Service应用
下一篇:通过Apache配置Rewrite实现网络服务的co-branding

分享到: 收藏