使用Mule ESB与Groovy编排RESTful服务
2009-12-01 00:00:00 来源:WEB开发网在接收到成功的订单消息后,该服务使用REST服务组件生成一个HTTP GET请求,并将该请求发送给此前存储在OrderResourceLocation属性(aka heade)中的URL。注意到我们是如何通过Mule表达式框架(使用#[...]语法)在组件中注入动态URL的。
在将GET请求的响应发送给负责与email网关进行通信的服务前,我们对XML订单实体进行了两次转换:
如上所述,我们“分离”了响应实体。
使用转换器解析XML实体并构建一个映射以供接下来的服务使用。这一次,又利用到了Groovy的强大功能。
Groovy's XmlSlurper Happiness
Groovy的XmlSlurper是解析XML微格式的理想工具,这要归功于其类似DSL的API。
如下代码展示了OrderMicroformatToEmailMap转换器的实现:
<scripting:transformer name="OrderMicroformatToEmailMap">
<scripting:script engine="groovy"><![CDATA[
def order = new XmlSlurper().parseText(payload)
.declareNamespace(acme: 'urn:acme:order:3:1')
result = [emailId:'OrderConfirmation',
emailAddress:order.'acme:customerEmail'.text(),
orderId:order.@id.text()]
]]>
</scripting:script>
</scripting:transformer>
没错,就两行Groovy代码,我们使用了一个命名空间感知的XML解析器和一个map构建器。其好处真是让人难以置信,不过这就是创建map(email网关服务所期望的)所需的全部内容。
最终的REST
在本文中,我们遵循着一个事先定义好的编排,新订单资源的URL是唯一的动态元素。开发者可以利用示例中介绍的转换器和表达式来支持更多的动态交互,如果你打算遵从HATEOAS路线,你就能获得一切。如果事实如此,那其他的Mule路由就唾手可得了,比如可以创建幂等接收者的路由。你也看到了Groovy的强大功能和灵巧性加上Mule的通信能力极大地简化了与RESTful服务的交互。Mule的表达式和少量的Groovy 脚本能够有效地动态定义Mule配置。除此之外,通过使用异步的VM队列将编排的各个步骤链接起来可以在最大负荷下优雅地降级,这要归功于Mule内在的SEDA架构。
借助于这些强大的工具,集成REST资源变得非常简单了。
祝你好运!
大家可以从http://dossot.net/datastore/mule-groovy-rest.tar.gz下载完整的配置和相关的测试资源,这是一个独立的Maven项目。
更多精彩
赞助商链接