openstack的mq机制,封装的很好,只需要通过调用几个高层函数就可以实现消费者、exchange、queue以及他们之间的bindings。具体的创建代码在service.py的start函数中。
1.结合nova-network服务的启动,分析openstack 的消费者相关的行为。
服务启动的入口在bin/nova-network中,核心代码只有三行:
server = service.Service.create(binary='nova-network') #create是一个类方法,该类的返回结果就实例化了一个Service对象,create方法进行了Service对象的初始化
service.serve(server) #启动该服务,服务启动后做的工作主要在这个方法中实现,该方法位于nova/service.py中
service.wait() #主线程等待
|
nova/service.py 的serve方法:
_launcher = None
def serve(*servers):
global _launcher #定义_launcher为全局变量
if not _launcher:
_launcher = Launcher() #实例化launcher,serveice操作的一些方法,对service方法的封装,实现了多个service的操作
for server in servers:
_launcher.launch_server(server) 启动server
|
nova/service.py的launch_server方法:
gt = eventlet.spawn(self.run_server, server) #创建一个绿色线程来执行run_server方法,并给该方法传入server对象
self._services.append(gt) #把返回的线程对象添加到_services数组中
|
nova/service.py的run_server方法:
server.start()
server.wait()
|
def start(self):
vcs_string = version.version_string_with_vcs()
LOG.audit(_('Starting %(topic)s node (version %(vcs_string)s)'),
{'topic': self.topic, 'vcs_string': vcs_string})
utils.cleanup_file_locks() #lockfile是用来不同平台进程通信时的同步锁,该方法删除进程执行失败后清理这些lockfile
self.manager.init_host() #network/manager.py下init_host方法初始化一些网络设备,比如说创建网桥等等
self.model_disconnected = False
.......
self.conn = rpc.create_connection(new=True) #创建连接,默认是kombo实现
LOG.debug(_("Creating Consumer connection for Service %s") %
self.topic)
# Share this same connection for these Consumers
self.conn.create_consumer(self.topic, self, fanout=False) #创建以topic为路由键的消费者
node_topic = '%s.%s' % (self.topic, self.host)
self.conn.create_consumer(node_topic, self, fanout=False) #创建以node.topic为路由键的消费者,exchange方式为topic的
self.conn.create_consumer(self.topic, self, fanout=True) #创建一个fanout方式转发的消费者,广播的形式,消息转发速度最快
#在创建consumer时,declare_consumer方法会将创建的声明的consumer添加到consumers数组中(self.consumers.append(consumer)),指定了消费者的回调函数(ProxyCallback,解析
#消息);在下面的consume_in_thread中执行
#self.consume ()方法,consume()方法会用所有消费者去做消费消息动作,该动作在iterconsume方法中,_consume()方法做消费消息的动作:
#self.connection.drain_events(timeout=timeout) 会等待来自服务器的消息通知
# Consume from all consumers in a thread
self.conn.consume_in_thread() #在一个绿色线程中消费消息
#下面是两个定时器,报告服务的状态等信息
if self.report_interval:
pulse = utils.LoopingCall(self.report_state)
pulse.start(interval=self.report_interval, now=False)
self.timers.append(pulse)
if self.periodic_interval:
periodic = utils.LoopingCall(self.periodic_tasks)
periodic.start(interval=self.periodic_interval, now=False)
self.timers.append(periodic)
|
相关推荐
openstack nova-network分析
centos7下centos-release-openstack-pike
centos8下centos-release-openstack-train
centos7下centos-release-openstack-mitaka
centos7下安装centos-release-openstack-ocata的yum源设置
centos-release-openstack-train-1-1.el7.centos.noarch.rpm
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
本次提供的文件名为“centos-release-openstack-rocky-1-1.el7.centos.x64-86.rpm.tar.gz”,它是一个包含多种组件的压缩包,旨在在CentOS 7平台上安装OpenStack Rocky版本及其相关软件。 首先,文件内容包含了多个...
本篇将详细介绍如何使用OpenStack-Nova计算节点的一键安装脚本来快速搭建和配置环境。 首先,理解OpenStack-Nova计算节点的关键角色:它承载着虚拟机实例的运行,通过与控制节点(如Keystone、Glance和Neutron)...
sudo docker build --rm -t="krystism/openstack-nova-compute" . 如何使用 ? 在启动 nova-compute 实例之前,您需要运行以下服务: mysql服务器 兔子mq 基石 概览 API 和概览注册表 nova-api & nova-cert & ...
在上述文件内容中,我们可以提炼出关于使用kolla-ansible部署OpenStack-Ussuri的相关知识点。以下将详细介绍文件内容中提及的各个知识点。 首先,文件内容提到了一个具体的操作过程时间点,2021年5月10日,表明文档...
openstack网络体系中,网络技术没有创新,但用到的技术点很庞杂,包含bridge、vlan、gre、vxlan、ovs、openflow、sdn、iptables等,当然这里不会做具体技术介绍,概述技术,主要将其与openstack的结合点做具体分析。...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
centos7下centos-release-openstack-ocata-1-2
《OpenStack云计算平台管理(nova-compute/network)详解》 OpenStack是一个开源的云计算平台,其设计目标是提供一个能够构建、部署和管理私有云和公有云服务的框架。在OpenStack中,nova-compute和network是两个至关...
centos-release-openstack-queens-1-2.el7.centos.noarch.rpm
sudo yum install -y openstack-nova openstack-neutron openstack-keystone openstack-glance openstack-cinder openstack-swift ``` 安装完毕后,需要配置各个服务以适应你的环境。这涉及到编辑一系列配置文件,...
centos-release-openstack-rocky-1-1.el7.centos.noarch.rpm
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
在进行OpenStack Nova源码分析时,我们需要深入了解其架构、核心模块以及关键流程。 首先,Nova的整体架构基于服务模型,包括以下主要服务: 1. **nova-api**:API服务,对外提供RESTful API接口,用于与其他...