高级消息队列协议 1.1 类型系统

1.1 类型系统

AMQP的类型系统针对具有互操作性的数据的表示,定义了一个通常使用的原生的类型的集合。
AMQP的值除了与原生的类型相关外,还能以额外的语义信息来注释。这允许AMQP的值与外
部的类型相关联。例如,一个URL能被表示为一个字符串,然而不是所有的字符串都是有效的
URL。并且许多的编程语言的应用程序为了表示URL而定义了一个特定的类型。AMQP的类型
系统在当一个值要意图表示一个URL时,可以允许一个编码的定义带有一个注释的字符串。

              1.1.1  原生的类型
AMQP类型系统为了表示共同的可变长度的值和共同的集合的原生类型,定义一个标准化的集合。
可变长的类型包括,布尔,整型,浮点数,时间,长标识串,字符,字符串,二进制数,符号。
集合的类型包括数组,列表,映射。

              1.1.2  描述的类型
由AMQP定义的原生的类型,能直接表示诸多的基本的类型,这些类型在最受欢迎的
编程语言中都能被表示出来。因此能被用来交换基本的数据。在实践中,然而,甚至是
最简单的应用都拥有它们自己的定制类型的集合,这些类型被用来对应用的领域进行概念性的建模。
在消息的应用程序中,这些定制的类型需要被扩展或者是转换。

AMQP提供了一个方法,通过提供一个对任何一个AMQP的类型使用一个描述符进行注解,
来完成这个类型的扩展。一个描述符形成了一个关联,是在一个定制的类型与一个AMQP的类型的关联。
这个关联显示了AMQP的类型实际上是定制的类型的一个表示。AMQP的类型和它的描述符的组合被叫做
一个描述的类型。

一个描述的类型包括了类型信息的两个不同部分。它标识着一个AMQP的类型和一个定制的类型(正如它们之间的关系)并且以能被在两个不同的层次上被理解。一个程序具有一个给定的领域的初始化的知识,它能理解描述的类型作为它们表示的一个定制的类型,因为解码和处理它们,要根据领域的完整的语义。一个程序没有初始化的知识,仍然
能理解描述的类型为AMQP的类型,如此地解码与处理它们。

              1.1.3  组合的类型
AMQP定义了一些组合类型,为了对结构化的数据例如帧的体部分进行编码而使用。
一个组合的类型定义了一个组合的值,它其中的任何一个值都被标识为一个域。任何
一个组合的类型定义都包括了一个有序的域的序列,任何一个都具有一个特定的名称,
类型和多样性。组合的类型也包括了一个或者是多个描述符(符号或者是数字),为了
标识着它们定义的表示。组合类型形式化的定义使用了在1.3部分中定义的XML的标识法。

              1.1.4  限制性的类型
AMQP定义一个限制性的类型的概念。这是一个新的类型,它是从一个存在的类型中推导出来的。
这个新的类型的被允许的值是已存在的类型的值的子集。限制性的类型通常被用在编程的组装过程,
在AMQP的术语中,最频繁的列举是整型的限制。然而,AMQP的限制类型的概念也能被表示成更多的
开放性的终端限制,例如一个URL被认为是一个字符串类型的限制。

一个限制类型定义可能限制一个预定义的固定长度的集合或者是一个开放性的终端的集合的允许的值。
在前面的案例中,任何被允许的值被称为一个选择,所有的可能的选择被列在前面的类型定义中。在
后面的案例中,限制的属性被规定为一个文本。

一个存在的类型,由它推导出了限制的类型 ,这个已存在的类型是限制类型的源类型。限制的类型可能或者没可能
被一个描述符注释,这依赖于类型的源定义。

猜你喜欢

转载自blog.csdn.net/gggwfn1982/article/details/81986111
1.1