nameko 命令分析
安装nameko
pip install nameko
安装 rabbitmq
很多nameko 内嵌的功能依赖于rmq(如 rpc pub-sub)
debian-based operating systems:
apt-get install rabbitmq-server
参考:
参考: https://nameko.readthedocs.io/en/stable/installation.html
命令一览
nameko -h
positional arguments:
{backdoor,show-config,run,shell}
optional arguments:
-h, --help show this help message and exit
上面四个 命令 对应的执行代码在: nameko/cli/commands.py
nameko run 命令
nameko.cli.main.main
-> nameko.cli.commands.Run#main
->nameko.cli.run.main
允许的参数
@staticmethod
def init_parser(parser):
parser.add_argument(
‘services’, nargs=’+’,
metavar=‘module[:service class]’,
help=‘python path to one or more service classes to run’)
parser.add_argument(
'--config', default='',
help='The YAML configuration file')
parser.add_argument(
'--broker', default='pyamqp://guest:guest@localhost',
help='RabbitMQ broker url')
parser.add_argument(
'--backdoor-port', type=int,
help='Specify a port number to host a backdoor, which can be'
' connected to for an interactive interpreter within the running'
' service process using `nameko backdoor`.')
return parser
最终调用方法: nameko.cli.run.run
- config 可以对应 yaml 的配置,里面的配置包括: nameko/constants.py 的定义的变量名 以及 LOGGING
LOGGING 配置直接传给 logging.config.dictConfig - 使用 ServiceRunner 管理 service_cls 列表
- 依次调用了 add_service 这里会 生成 ServiceContainer 实例,然后add到 service_map
- nameko.runners.ServiceRunner#start
并发启动全部 container的start (每个service 创建一个 container)
container 的start并发 启动 extensions 的 setup 和 start .
插件一些注意事项
-
不要在 插件的__init__ 方法中做初始化,因为声明 时候 以及 bind 时候 会调用 2次 做好 在 setup中 做初始化.
-
插件 的 setup 和 start 都是 并发调用的,所以如果有依赖 自己要注意, 可以 一个放在setup 一个在 start 调用