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

Neutron-server服务载入与启动源代码分析(二)中搞定模块功能的扩展和载入。我们就回到Neutron-server服务载入与启动源代码分析(一)中的_run_wsgi函数

  1. <span style="font-size:14px;">def _run_wsgi(app_name):
  2. app = config.load_paste_app(app_name)
  3. ifnot app:
  4. LOG.error(_('No known API applications configured.'))
  5. return
  6. server = wsgi.Server("Neutron")
  7. server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,
  8. workers=cfg.CONF.api_workers)
  9. # Dump all option values here after all options are parsed
  10. cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
  11. LOG.info(_("Neutron service started, listening on%(host)s:%(port)s"),
  12. {'host': cfg.CONF.bind_host,
  13. 'port': cfg.CONF.bind_port})
  14. return server</span>

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

  1. <span style="font-size:14px;">server = wsgi.Server("Neutron")
  2. server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host,
  3. workers=cfg.CONF.api_workers)</span>

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

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

  1. <span style="font-size:14px;">def start(self, application, port, host='0.0.0.0', workers=0):
  2. """Run a WSGI server with the givenapplication."""
  3. self._host = host
  4. self._port = port
  5. backlog = CONF.backlog
  6.  
  7. #获取socket信息
  8. self._socket = self._get_socket(self._host,
  9. self._port,
  10. backlog=backlog)
  11.  
  12. self._launch(application, workers)</span>

  1. <span style="font-size:14px;">def _launch(self, application, workers=0):
  2. service = WorkerService(self, application)
  3. if workers <1:
  4. # workers小于1直接执行在当前的进程
  5. self._server = service
  6. service.start()
  7. systemd.notify_once()
  8. else:
  9. # API服务执行一定数量的子进程
  10. # 等待间隔时间默认0.01s
  11. self._server = common_service.ProcessLauncher(wait_interval=1.0)
  12. self._server.launch_service(service, workers=workers)</span>

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

  1. <span style="font-size:14px;">def main():
  2. ……
  3. try:
  4. pool = eventlet.GreenPool()
  5.  
  6. neutron_api = service.serve_wsgi(service.NeutronApiService)
  7. api_thread = pool.spawn(neutron_api.wait)
  8.  
  9. try:
  10. neutron_rpc = service.serve_rpc()</span>

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

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

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

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

Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)的更多相关文章

  1. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  2. Flutter学习笔记(19)--加载本地图片

    如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...

  3. Springboot学习04-默认错误页面加载机制源码分析

    Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...

  4. Quartz.net 2.x 学习笔记03-使用反射加载定时任务

    将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...

  5. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  6. WMS学习笔记:1.尝试加载WMS

    1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...

  7. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  8. Android学习笔记_36_ListView数据异步加载与AsyncTask

    一.界面布局文件: 1.加入sdcard写入和网络权限: <!-- 访问internet权限 --> <uses-permission android:name="andr ...

  9. 【OpenCV学习笔记之一】图像加载,修改及保存

    加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...

随机推荐

  1. 完全背包(南阳oj311)(完全背包)

    全然背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用. 第i种物品的体积是c.价值 ...

  2. Directx11学习笔记【四】 封装一个简单的Dx11DemoBase

    根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBas ...

  3. Idea开发环境

    Idea开发环境中搭建Maven 1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path ...

  4. 【最小割】HDU 4971 A simple brute force problem.

    说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...

  5. c# winform panel 流式布局 panel块可自动排列

    代码下载地址  http://download.csdn.net/detail/simadi/7677053

  6. 玩转Web之Jsp(三)-----Jsp+SQLServer 用sql语句实现分页

    在BBS的实现里,jsp与sqlserver 结合的操作中,怎样实现分页,使每页显示根帖的名字,并按发表时间降序排列? 在这里举例说明,page_size为每页显示的条数,pageNo为当前页数,st ...

  7. 【嵌入式开发】写入开发板Linux系统-模型S3C6410

    笔者 : 万境绝尘 转载请著名出处 最终拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

  8. zoj 3820 Building Fire Stations(树上乱搞)

    做同步赛的时候想偏了,状态总是时好时坏.这状态去区域赛果断得GG了. 题目大意:给一棵树.让求出树上两个点,使得别的点到两个点较近的点的距离最大值最小. 赛后用O(n)的算法搞了搞,事实上这道题不算难 ...

  9. Serializable 作用

    Serializable 作用 序列化的attribute,是为了利用序列化的技术 准备用于序列化的对象必须设置 [System.Serializable] 标签,该标签指示一个类能够序列化. 便于在 ...

  10. MyBatis与Spring设置callSettersOnNulls

    项目中集成Mybatis与Spring,使用的是Mybatis3.2.7,以及Spring4.0.5,mybatis-spring-1.2.2;由于项目组成员想要偷懒,将数据从DB中查询出来时须要将字 ...