openstack中的消息队列
更新记录:
2013.4.28 增加版本号
版本:Essex版
1 openstack中消息队列的使用
nova中的每个组件都会连接消息服务器,一个组件可能是一个消息发送者(如API、Scheduler),也可能是一个消息接收者(如compute、volume、network)。发送消息有两种方式:同步调用rpc.call和异步调用rpc.cast
openstack内部一些对象:
l Topic Publisher:该对象在进行rpc.call或rpc.cast时创建,每个对象都会连接同一个topic类型的交换器,消息发送完毕后对象被回收。
l Direct Publisher:该对象在进行rpc.call调用时创建,用于向消息发送者返回响应。该对象会根据接收到的消息属性连接一个direct类型的交换器。
l Direct Consumer:该对象在进行rpc.call调用时创建,用于接收响应消息。每一个对象都会通过一个的队列连接一个direct类型的交换器(队列和交换器以UUID命名)。
l Topic Consumer:该对象在内部服务初始化时创建,在服务过程中一直存在。用于从队列中接收消息,调用消息属性中指定的函数。该对象通过一个共享队列或一个私有队列连接一个topic类型的交换器。每一个内部服务都有两个topic consumer,一个用于rpc.cast调用(此时连接的是binding-key为“topic”的共享队列);另一个用于rpc.call调用(此时连接的是binding-key为“topic.host”的私有队列)
l Topic Exchange:topic类型交换器,每一个消息代理节点只有一个topic类型的交换器。
l Direct Exchange:direct类型的交换器,存在于rpc.call调用过程中,对于每一个rpc.call的调用,都会产生该对象的一个实例。