书一 类型
1.1 类型系统
AMQP类型定义了常用的基本类型来用于互相操作数据时的表示。AMQP使用一些额外的语义信息来描述基本类型对应的值。这就允许与AMQP值相关联的一些描述信息作为基本类型出现在规范中。例如:URL通常被定义成字符串,但是不是所有的字符串都是有效的URL,同时许多其它的语言也用一些特殊的类型定义了URL。在AMQP中,当一个字符串是被用于URL的时候,系统会定义一个特殊的编码值来注释这个特殊的字符串为URL。
1.1.1 基本类型
以下是定义的基本类型:
null 定义一个空值
boolean 描述true和false
ubyte 0到2^8-1范围的整数
ushort 0到 2^16-1范围的整数
uint 0到2^32-1范围的整数
ulong 0到2^64-1范围的整数
byte -(2^7)到(2^7-1)范围的整数
short -(2^15)到(2^15-1)范围的整数
int -(2^31)到(2^31-1)范围的整数
long -(2^63)到(2^63-1)范围的整数
float 32位浮点数(IEEE 754-2008 binary32)
double 64位浮点数(IEEE 754-2008 binary64)
decimal32 32位数字类型(IEEE 754-2008 decimal32)
decimal64 64位数字类型(IEEE 754-2008 decimal64)
decimal128 128位数字类型(IEEE 754-2008 decimal128)
char unicode码字符
timestamp 时间戳
uuid 全球唯一ID(定义在RFC-4122文档中4.1.2章节)
binary 8位的一个序列
string 字符串
symbol 固定域中的符号值
list 列表
map 映射表
array 数组
1.1.2 描述类型
AMQP直接定义了许多在其它常用语言中使用的基本类型,因此这些基本类型可以用于一些基本数据的交换。事实上,最基本的应用也有它自己描述特殊模型概念的类型,比如应用的域,消息等,这些定制的类型也需要额外的传输。
AMQP提供一个机制来做这个事情,那就是允许AMQP的类型去注释一个描述符。描述符在用户的定制类型和AMQP类型之间形成关联。这种关联可以理解为AMQP类型是用户定制类型的一个描述。最后AMQP类型和它对应的描述符就构成了描述类型。
一个描述类型包含两种类型信息。它既标识AMQP类型,又标识用户类型(可以看做是他俩之间的关联),因此能理解成两个不同的层次。对于一个给定详细描述信息域的应用来说,可以把描述类型看成是用户类型,因此解析和处理就可以根据用户类型描述的形式一样。对于一个没有详细信息域的应用来说,仍然可以把描述类型看成是AMQP类型,解析和处理就按照AMQP类型来做。
1.1.3 描述符
描述符的值除了语法符号或者数字外,其它值在语法上来讲都是不合法的。为了使用户使用描述符的值在与其它描述符的值不冲突的情况下,一种分配语法符号及数字描述符的规则在下边说明。
语法符号和数字符号的名字空间被分成了两个独立的域中。AMQP工作组为每个域中定义分配了语法符号或者数字id。在AMQP规格中,数字ID是被分配成域ID的,这些域ID是和IANA中私有企业号(PEN)相同的,对应IANA链接为http://www.iana.org/assignments/enterprise-numbers,其中域ID中的0是被保留的。
描述符被分配到每个域是按照如下的规则来的:
语法描述符:
<domain>:<name>
数字描述符:
(domain-id << 32) | descriptor-id