我通读了Camel的书,但无法真正理解如何区分这两者,它们看起来一样,都试图将数据类型转换为另一种。任何人都可以进一步阐述在哪种情况下我应该使用特定的一个?两者之间有什么区别?
数据格式
http://camel.apache.org/data-format.html
伪示例:
from("file://riders/inbox")
.marshal().csv()
.to("activemq:queue:inbox");
类型转换器
http://camel.apache.org/type-converter.html
伪示例:
from("file://riders/inbox")
.convertBodyTo(String.class)
.to("activemq:queue:inbox");
答案 0 :(得分:1)
如果要将类型转换为任何其他类型,请使用类型转换器。例如,您可以使用类型转换器将Cat类转换为Dog类。
元帅/元帅来自可序列化学校。基本上,您可以将内存中的任何数据结构映射到字节流(例如,可能将其保存在磁盘中)。 Apache Camel镜像相同(尽管它们已将其扩展为某些常用格式,如XML,HL7等)。这些也是字符串(主要是字符串)或类型,可以很容易地表示为易于序列化的字节流(例如protobuf)。
在Apache Camel中,如果您注意到,如果您使用编组/解组,则它不是通用的。输入或输出类型是固定的-表示您不能从类型转换为任何类型。但这不是类型转换器的情况-您可以将类型转换为任何类型(使用默认类型转换器或必须提供实现)。
您可以将封送/取消封送视为类型转换的一种特定情况,其中类型是固定的(通常只有骆驼家伙会提供实现)。正如您在示例中所看到的,marshal().csv()
是Camel DSL的一部分。
但是,如果您使用类型转换器,则可以自由添加自己的逻辑。那是通用的。
答案 1 :(得分:0)
Camel以可插拔的方式支持不同的数据格式。这意味着骆驼可以封送或拆封给定格式的消息。 骆驼本机支持Avro,JSON,protobuf,JAXB,XmlBeans,XStream,JiBX,SOAP等。
骆驼知道端点的预期格式和类型,为此骆驼寻找一种类型转换器,可以将消息从一种类型转换为另一种类型。您甚至可以像POJO类一样使用自己的类型转换器。
在下面的示例.convertBodyTO
中,首先将流转换为字符串,我们还可以通过设置charset参数来更改流的编码。
示例-
from("file://riders/inbox")
.convertBodyTo(String.class,"UTF-8")
.to("activemq:queue:inbox");
.marshal().csv()
将其编组为csv字符串格式
当您必须将消息转换为特定数据类型(例如JSON,YAML,JAXB
)时,可以使用Dataformat,但是不能使用DataFormat将消息转换为用户定义的数据类型。