Mule ESB的众多优势之一是它可以处理很多不同协议之间的消息传输。例如,一个订货清单也许总是XML格式的,但它在一种情况下或许通过HTTP方式到达而另一种情况下却通过JMS消息方式到达,这取决于哪一个应用程序创建该订货清单。如果服务组件仅仅只能处理业务逻辑和数据,而不能处理消息本身,它又如何能够读取以不同格式到达的消息呢?
答案是这样的,服务组件是不知道如何读取消息的,因为在默认情况下,服务组件完全和消息格式相互隔离。传输者仅仅传输消息,在路由把消息路由给服务组件之前,转换器把消息转换成服务组件能够读取的格式。例如,如果一个XML格式的订货清单通过HTTP发送,HTTP传输者传输消息,路由把消息导向到处理它的服务组件,转换器则负责把订单转换成每个服务组件所要求的消息格式。所有的传输、转换和路由对服务组件来说都是透明的。
转换器是数据交换的关键所在,它们允许mule把数据从一种格式转换到另一种服务或应用程序可以识别的格式。最重要的是,数据可以按需进行转换。不是将消息格式进行简单的转换,当消息被发送时,只有当目标组件或应用程序需要时,消息和数据才会被转换。最后,你可以在不同的管道中使用多种类型的传输。例如,用HTTP协议发送消息,在被客户数据服务组件处理后将其作为JMS消息转发。
这种把发送和转换消息格式相分离的逻辑给与了你建立架构最大的灵活性,并且让你可以自定义业务逻辑而无需担心多种不同格式消息的处理。如果你希望,服务组件当然也可以和转换之前的原消息打交道,但这不是必须的。