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

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

暂时无描述信息

在Mule中,我们可以通过一个简单的HTTP输出端点(outbound endpoint)实现该交互。注意到交互本身是通过向订单创建服务发送一个包含请求值(客户与产品ID、数量)的映射而触发的。该服务如下所示:

<service name="OrderCreationService">
  <inbound>
   <inbound-endpoint ref="OrderCreationQueue" />
  </inbound>
  <outbound>
   <chaining-router>
     <http:outbound-endpoint synchronous="true"
        responseTimeout="15" method="POST"
        host="${acme.order.hostname}"
        port="${acme.order.port}" path="orders"
        user="${acme.order.username}"
        password="${acme.order.password}"
        contentType="application/vnd.acme+xml" encoding="UTF-8">
        <transformers>
         <transformer ref="OrderMapToMicroformat" />
        </transformers>
        <response-transformers>
          <message-properties-transformer>
             <add-message-property key="OrderPlaced"
               value="#[groovy:message.getStringProperty('http.status','ERR')=='201']" />
             <add-message-property
               key="OrderResourceLocation"
               value="#[groovy:message.getStringProperty('Location','')]" />
          </message-properties-transformer>
          <object-to-string-transformer />
        </response-transformers>
      </http:outbound-endpoint>
      <outbound-endpoint ref="OrderCreationResultQueue" />
   </chaining-router>
  </outbound>
</service>

这全是XML,我们来仔细分析一下:

名为OrderCreationQueue的管道(可以是VM队列或是JMS队列)接收消息。

接收到的消息被直接传递到另一个路由,该路由会将HTTP POST的结果发送到下一个服务,该服务通过名为OrderCreationResultQueue(异步的VM队列)的管道对调用结果进行分析。

通过标准的输出端点在Groovy转换器上执行该HTTP POST请求:

请求订单的微格式是通过一个特定的传送器创建的,下一节将对其进行详细介绍。

通过一小段脚本将结果代码抽取出来并与期望值进行比对。进行比较的目的在于将后面的服务与纯的HTTP隔离开来:我们所创建的boolean类型的属性OrderPlaced是独立的,其名称与进行的编排密切相关。

类似的,在更具上下文含义的OrderResourceLocation名字下复制Location头。注意,该头 有可能丢失(在失败的情况下),在这种情况下,我们将其值默认设为空字符串以避免将null属性加到消息中。

我们使用了一个对象——字符串转换器来“分离”HTTP响应(以流的形式返回)。多亏有了这个转换器,流得到了完全的处理,其内容也通过使用与 HTTP交换相关的编码转换为字符串。当流关闭时,HTTP连接得到了释放;我们不想一直开着它,等待后面的服务从 OrderCreationResultQueue中拿出响应消息。

相关热词搜索:

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

分享到: 收藏