neighborhoods/throwable-diagnostic-component

一个用于诊断可抛出异常的服务无关组件。

4.0.3 2021-06-18 17:03 UTC

README

一个用于诊断Throwables的服务无关组件。

ThrowableDiagnostic可以确定一个Throwable是否由于永久性或暂时性故障(网络问题、数据库关闭、第三方服务不可用)而发生。

默认情况下,每个Throwable都被认为是永久的,但某些Throwables被认为是暂时的。通过自定义诊断逻辑,可以识别出这些情况。

对于RDBMS和AWS等常见情况,提供了现成的诊断逻辑。定义自己的诊断逻辑非常简单。

安装

通过Composer

$ composer require neighborhoods/throwable-diagnostic-component

版本控制

不要混淆在packagist上的发布版本,例如3.0.0,与该包内包含的组件版本,例如AwsSqsV1。一个发布版本可能包含同一组件的多个版本。
您的代码中可能部分使用较旧版本的组件,而其他部分使用最新版本。

升级

要从版本3升级到版本4,请遵循升级指南

用法

组件分为两类

  • Throwable Diagnostic
  • Throwable Diagnostic Decorator

Throwable Diagnostic定义了这种工作的核心概念。Throwable Diagnostic主要包含接口。它决定了用户代码如何诊断Throwable,装饰器的样子,以及如何定义要使用的装饰器栈。您可以将其视为一个框架/骨架/脚手架。
可能会有多个版本的throwable diagnostic,例如ThrowableDiagnosticV1和ThrowableDiagnosticV2。

Throwable Diagnostic Decorator负责诊断某些Throwables。例如,GuzzleV1组件有一个装饰器,用于确定来自guzzle的异常是暂时的还是不是。在诊断过程中,Throwable可以被多个装饰器检查,每个装饰器都可能决定该Throwable是暂时的、永久的,或者应该传递给下一个装饰器。Throwable diagnostic decorator是为Throwable Diagnostic的特定版本制作的。所有与ThrowableDiagnosticV1兼容的装饰器都放在src/ThrowableDiagnosticV1Decorators文件夹中。
为不同的Throwables提供了装饰器。对于某些Throwables的诊断逻辑可能有多个版本,例如GuzzleV1、GuzzleV2。如果可能的话,请使用最新版本。这里的版本并不对应guzzle的版本,而是对应特定装饰器的版本。您可以实现自己的装饰器来正确处理特定于您自己的代码的Throwables,或者为没有装饰器的包实现一个装饰器。

有关用法细节和预定义装饰器的列表,请参阅相应的Throwable Diagnostic版本。

Buphalo集成

Buphalo模板适用于使用throwable diagnostic、自定义throwable diagnostic decorator以及相关文件的演员。

先决条件

Buphalo模板提供在自定义模板树中。Buphalo已在版本1.1中添加了对多个模板树的支持。请确保您已安装Buphalo版本1.1或更高版本。
你可能在项目的bin文件夹中有一个脚本正在运行vendor/bin/buphalo,并包含了所有必需的环境变量。编辑模板树目录路径的环境变量,以便包含本包中的模板树。环境变量定义可能如下所示。

Neighborhoods_Buphalo_V1_TemplateTree_Map_Builder_FactoryInterface__TemplateTreeDirectoryPaths=default:$PWD/vendor/neighborhoods/buphalo/template-tree/V1,diagnostic:$PWD/vendor/neighborhoods/throwable-diagnostic-component/template-tree/BuphaloV1

上面的export假设你没有其他自定义的模板树。