zoukankan      html  css  js  c++  java
  • Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)

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

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

    <span style="font-size:14px;">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</span>


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

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


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

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

    <span style="font-size:14px;">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)</span>


     

    <span style="font-size:14px;">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)</span>


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

     

    <span style="font-size:14px;">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()</span>


     

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

     

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

     

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

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

  • 相关阅读:
    安卓SQLite数据库操作(上)
    Android 查看设备信息
    Unity 编辑器学习(四)之 静态游戏物体
    Unity 编辑器学习(三)之 Light & Baked
    Unity 编辑器学习(二)之 全局光照(GI)
    unity 自动删除未引用的Assets下的资源
    C# http服务器
    unity 美术注意事项
    软件版本号命名规范
    Unity 框架(一)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4743329.html
Copyright © 2011-2022 走看看