博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)
阅读量:5827 次
发布时间:2019-06-18

本文共 2468 字,大约阅读时间需要 8 分钟。

本文是在学习Openstack过程中整理和总结。因为时间和个人能力有限。错误之处在所难免,欢迎指正!

中搞定模块功能的扩展和载入。我们就回到中的_run_wsgi函数

def _run_wsgi(app_name):    app = config.load_paste_app(app_name)    ifnot app:        LOG.error(_('No known API applications configured.'))        return    server = wsgi.Server("Neutron")    server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,                 workers=cfg.CONF.api_workers)    # Dump all option values here after all options are parsed    cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)    LOG.info(_("Neutron service started, listening on%(host)s:%(port)s"),             {'host': cfg.CONF.bind_host,              'port': cfg.CONF.bind_port})return server

app =config.load_paste_app(app_name)在这里就完毕模块功能的扩展和载入。接下来看

server = wsgi.Server("Neutron")    server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,                workers=cfg.CONF.api_workers)

创建一个neutron的服务端,然后启动这个server

这边配置文件里默认的api_workers为0

def start(self, application, port, host='0.0.0.0', workers=0):        """Run a WSGI server with the givenapplication."""        self._host = host        self._port = port        backlog = CONF.backlog         #获取socket信息self._socket = self._get_socket(self._host,                                       self._port,                                        backlog=backlog)         self._launch(application, workers)

 

def _launch(self, application, workers=0):        service = WorkerService(self, application)        if workers <1:            # workers小于1直接执行在当前的进程            self._server = service            service.start()            systemd.notify_once()        else:            # API服务执行一定数量的子进程            # 等待间隔时间默认0.01s            self._server = common_service.ProcessLauncher(wait_interval=1.0)            self._server.launch_service(service, workers=workers)

运行完_run_wsgi函数,就完毕service.start()的运行,也就完毕neutron_api= service.serve_wsgi(service.NeutronApiService)的工作。

 

def main():    ……    try:        pool = eventlet.GreenPool()         neutron_api = service.serve_wsgi(service.NeutronApiService)        api_thread = pool.spawn(neutron_api.wait)         try:           neutron_rpc = service.serve_rpc()

 

      我们启动了一个wsgi的服务,而且把资源载入和扩展等等准备工作都做好了,“万事具备仅仅欠东风”,如今就从线程池中spawn一个线程来监听neutron api命令,这里再啰嗦一句neutron api命令到来之后。最后是路由到neutron.api.v2.base中的Controller中进行处理

 

      main函数最后就是运行neutron_rpc =service.serve_rpc())是通过plugin实现的,開始一个或者多个Rpcworker,并监听请求,监听topics中消息队列。我的理解是这个是用来监听neutron内部组件之间的通信。

 

至此Openstack neutron启动源代码的简单分析成品和扩张过程中的服务资源加载。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
onchange()事件的应用
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>
python 异常
查看>>
百度账号注销
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
基本概念复习
查看>>
重构第10天:提取方法(Extract Method)
查看>>
Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
查看>>
解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
查看>>
多线程day01
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>
MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
第四章 mybatis批量insert
查看>>