必要知识
oriole-service ≥ 30.6.0
还不会创建微服务?看
环境
为了演示,创建三个微服务:
- eric_service 独立服务
- src_service 起始服务,使用中间服务进行审核,然后继续执行。
- mid_service 中间服务
简略表示为: 【src_service】->【mid_service】->【src_service】
三个微服务处于同一个容器中,实际上如果分别运行在不同的容器中,结果与本文完全一致,这正是分布式的强大之处。
微服务同时运行,交错输出,不是传统的A调用B结束之后B再调用A,以后有机会再细说其中奥妙。
默认方法
采用oriole_service创建的所有微服务自动加入跟踪,如下图:
1 2 3 4
| 微服务跟踪显示三个服务都参与了服务自动发现 [eric_service.ms_update_service.301fa437-5e46-4d39-b116-6b3ad2b8c84a] entrypoint result trace [mid_service.ms_update_service.bc1a29e8-8a20-44e1-96fa-e14b3d5acd18] entrypoint call trace [src_service.ms_update_service.cb07d701-e74a-4842-bcac-cb65a981a760] entrypoint call trace
|
高级方法
显示详细信息
在services.cfg中加入
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| LOGGING: version: 1 disable_existing_loggers: false formatters: tracer: (): nameko_tracer.formatters.JSONFormatter loggers: nameko_tracer: level: INFO handlers: [tracer] handlers: tracer: class: logging.StreamHandler formatter: tracer
|
执行o s
1 2 3 4 5 6 7 8
| 显示所有在线服务 服务名 容器 版本 eric_service => 73273e056d25|1.0.1 mid_service => 73273e056d25|0.0.1 src_service => 73273e056d25|0.0.1
调用src_service微服务的add方法 >>> src_service.add()
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [src_service.add.f1fcca92-d5a7-4d78-9237-dc50f40ef71d] entrypoint call trace
{ "hostname": "73273e056d25", "service": "mid_service", "context_data": {}, "call_id": "mid_service.handle.9bc76133-7302-4771-8248-460a870b5082", "call_id_stack": [ "standalone_rpc_proxy.call.b0c00628-0d5e-47f5-89f0-ddc0aa6c709d", "src_service.add.f1fcca92-d5a7-4d78-9237-dc50f40ef71d", "mid_service.handle.9bc76133-7302-4771-8248-460a870b5082" ], "origin_call_id": "standalone_rpc_proxy.call.b0c00628-0d5e-47f5-89f0-ddc0aa6c709d", "stage": "request", "call_args": {"params": {"param": "eric"}}, "call_args_redacted": false }
[mid_service.handle.9bc76133-7302-4771-8248-460a870b5082] entrypoint call trace
|
后记
软件设计形同对弈,鼠目寸光则困于当下,势利均沾方可进退自如,世所困扰大体如是。