Terminators¶

功能¶

请求结束时的中间件,主要包括资源的回收和调用链信息上报等功能。

接口¶

  1. interface RequestTerminator {
  2. /**
  3. * @param Request $request 请求实例
  4. * @param Response $response 响应实例
  5. * @param Context $context 请求上下文
  6. * @return void
  7. */
  8. public function terminate(Request $request, Response $response, Context $context);
  9. }
  • terminate方法的实现可以为协程或者纯函数。
    配置请求与terminate对应关系的规则与Filter相同,类似为:
  1. <?php
  2. return [
  3. 'match' => [
  4. // 可以单独针对 所有泛化调用 设置过滤器
  5. [
  6. "/com/Yourcompany/nova/framework/generic/service/GenericService/invoke", "genericServiceFilterGroup",
  7. ],
  8. // 也可以直接 针对特定服务配置, 在过滤器内检测是否是泛化调用
  9. [
  10. "/Com/Yourcompany/Nova/Framework/Generic/Php/Service/GenericTestService/ThrowException", "genericServiceFilterGroup",
  11. ],
  12. [
  13. ".*", "all"
  14. ]
  15. ],
  16. 'group' => [
  17. "genericServiceFilterGroup" => [
  18. TraceTerminator::class
  19. ],
  20. "all" => [
  21. TraceTerminator::class
  22. ],
  23. ]
  24. ];

示例¶

  1. class TraceTerminator implements RequestTerminator
  2. {
  3. public function terminate(Request $request, Response $response, Context $context)
  4. {
  5. $trace = $context->get('trace');
  6. if (method_exists($response, 'getException')) {
  7. $exception = $response->getException();
  8. if ($exception) {
  9. $trace->commit($exception);
  10. } else {
  11. $trace->commit(Constant::SUCCESS);
  12. }
  13. } else {
  14. $trace->commit(Constant::SUCCESS);
  15. }
  16.  
  17. //send数据
  18. yield $trace->send();
  19. }
  20. }

以TraceTerminator为例,其通过context获取trace实例之后,将监控信息进行上报。

自定义terminator会在框架terminator执行之前执行

原文: http://zanphpdoc.zanphp.io/libs/middleware/terminators.html