RabbitMQ的通信:
rabbitMQ在于核心产品之间进行通信几乎采用的都是RPC模式(远程过程调用),我们使用的大多数的基于WebApi调用就是一种常见的RPC模式,不过不同是的,我们在通常使用WebApi远程调用时,服务器并不会给客户端发出命令,而AMQP规范中,客户端与服务器之前都可以发出命令。
rabbitMQ的会话启动:协议头,这个不是请求也不是命令。客户端发出协议头后,服务端通过Connection.Start命令 相应,客户端再使用Connection.startOk相应RPC请求。他们之前的语言类似于类和方法,类connection,方法start。帧可以认为是传输信息的工具。
AMQP规范了五种类型的帧:协议头帧,方法帧,内容头帧,消息体帧,心跳帧。
协议头用来链接RabbitMQ,方法帧携带的是RPC请求与相应,内容头帧包含一条消息的大小和属性,消息体帧包含消息的内容。心跳帧在客户端与RabbitMQ之前传递,校验双方都可用。
一般我们发送消息使用的是方法帧,内容头帧,消息体帧。方法帧为第一个,可能携带的是交换器,路由键或者其他的参数,第二个为内容帧。需要注意的是帧是有大小的。
帧的结构:
方法帧结构
首先是帧的统一组件:帧类型,信道编号,以字节为单位的帧大小;其次是方法帧的有效载荷;最后是统一组件:结束字节标记。
其中有效载荷中分为5个组件:请求类,请求类的方法,交换器名称,路由键值,mandatory标志
mandatory标志告知Rabbitmq必须完成路由消息,否则它应该发送一个Basic.Return帧用于指明消息无法路由。
内容头帧
内容头帧的有效载荷中有:消息体大小,标志值,内容类型,app_id属性,timestamp属性,投递模式。
消息体帧
消息体对于AMQP协议而言是不透明的,且不被Rabbitmq解码、检查或评估。