欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mule in action翻译24 : 4.3 使用核心转换器

程序员文章站 2022-06-17 19:38:40
...

mule in action翻译24 : 4.3 使用核心转换器

     mule的核心库有很多转换器。他们提供不依赖传输的转换功能,比如压缩、加密、抽取payload值。本节将讲述六个常用的payload类型和属性转换器。

1、处理字节:使用字节转换器对字节和流类型的payload进行类转换。

2、压缩数据:使用gzip压缩或解压缩payload。

3、修改属性:和转换器一起工作,用来修改消息属性。

4、使用表达式语言:使用能计算表达式的转换器创建一个新的payload。

5、扩展消息(Enriching  messages):不需要完整的转换它而在消息中增加更多的信息。

6、自动转换:自动选择使用最佳的转换器来得到期望的结果。

 

先来看一对处理字节的转器。

 

4.3.1 处理字节

       字节数据是不同系统交换数据的细粒度数据单元。在这些系统中字节的处理往往以流或数组的方式,

前者(流)适合大批量的数据,后者适合数据量小的情况。

     mule的核心库中,转换器ByteArrayTo的输入既可以是流也可以是byte数组。这意味着在endpoint中声明的可以处理流的转换器,也将能直接处理流而不需要首先转换为数组。

    先来看功能多样的 byte-array-to-object-transformer。如果这个转换器接受了字节类型的payload--一个序列化后的Java对象,输出结果是一个反序列化后的对象。如果payload不是一个序列化对象,转换器将使用这些字节数据创建一个String。下面的代码展示了这个转换器,配置为反序列化字节数组或流为一个java.util.Map的实例。

<byte-array-to-object-transformer name="ByteArrayToMap" returnClass="java.util.Map"/>

 这个转换器使用在任何的不是接受序列化的java.util.Map对象的 endpoint 中时,会抛出TransformerException异常,并会停止对消息的处理。

 

     另一个对应的转换器是object-to-byte-array-transformer。正如你猜想的一样,这个是进行反向处理的;它把字符串和流转换为字节数组,它使用Java标准的序列化机制吧可序列化的payload转换为字节数据。注意,不可序列化的payload将阻塞这个转换器,因为对他不可能执行任何的转换。下面展示了一个简单的转换器的声明,它复制所有的流的输入到一个字节数组。

<object-to-byte-array-transformername="ObjectToByteArray" />

     注意:  有时对一个对象你可能需要一个让人易读的描述,比如当需要进行调试时。为了正确说明类型你可以使用object-to-string来替代object-tobyte-array,object-to-string会自动的“考虑”编码。

 

    复制全部的输入流数据到数组会对mule实例的内存造成重大影响。这不会轻易的发生。你为什么会做那么傻的事情?当处理异步事件时,你不能保证在消息处理过程中输入流总是保持打开的。如果 inbound endpoint认为它已经接受完了响应,它将关闭连接,关闭所有打开的流。在接受完消息后,转换器再把payload填充到消息中,这样的处理是安全的。这是一种从传输(transport)分离消息的一种方式。

 

    最佳实践   一定要考虑你使用的转换器对内存的影响。

 

    最佳实践   在处理瞬时数据时可能没有足够的时间处理完整个流(比如  FTP 数据),这时可以考虑使用

                     file, VM或JMS传输把数据发送到一个可靠的outbound endpoint,在哪里进行处理。

 

 如果你列出所有mule的核心的字节相关的转换器,你会发现还会有其他几个。这里把他们罗列出来:

1、byte-array-to-serializable-transformer 和 serializable-to-bytearray-transformer 。

      这些是byte-array-toobject-transformer和object-to-byte-array-transformer的特殊版本,他们只能转换为

     序列化的Java对象或从序列化的Java对象转换为来。

 

 2、byte-array-to-hex-string-transformer 和  hex-string-to-byte-arraytransformer。

       这对转换器和别的转换器无关。顾名思义,他们从(或转换为)16进制数据。

 

3、 byte-array-to-string-transformer 和 string-to-byte-array-transformer

       这两个转换器会依赖当前的编码方式。

 

 

相关标签: mule esb