softonic / laravel-transactional-event-publisher
Softonic Laravel 事务性事件发布者
Requires
- php: ^8.1
- laravel/framework: ^9.0|^10.0
- softonic/laravel-amqp: ^2.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- laravel/legacy-factories: ^1.0.4
- mockery/mockery: ^1.2
- orchestra/testbench: ^7.0|^8.0
- php-mock/php-mock-mockery: ^1.3
- phpunit/phpunit: ^9.0
- rector/rector: ^0.11.20
- squizlabs/php_codesniffer: ^3
- dev-master
- 9.4.2
- 9.4.1
- 9.4.0
- 9.3.0
- 9.2.0
- 9.1.1
- 9.1.0
- 9.0.0
- 8.0.1
- 8.0.0
- 7.0.7
- 7.0.6
- 7.0.5
- 7.0.4
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- 6.0.0
- 5.2.0
- 5.1.0
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.0.0
- 3.0.0-alpha6
- 3.0.0-alpha5
- 3.0.0-alpha4
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- dev-feature/adapt-service-provider
- dev-Remove-model-relations-from-events-payload
- dev-feature/upgrade-laravel-amqp-version
- dev-feature/add-compatibility-to-laravel-10
- dev-feature/DS-974_remove_events_after_emmit
- dev-Send-events-in-batches
- dev-feature/upgrade_laravel_amqp
- dev-feature/add-event-publisher
This package is auto-updated.
Last update: 2024-09-23 16:06:31 UTC
README
Laravel 包,用于处理 Eloquent 模型操作和领域事件消息生成之间的原子性。
主要功能
- 确保每个操作都通过 Eloquent 模型操作、事件生成和发送之间的原子事务发送领域事件。
- 将事件异步或同步发送到 AMQP 系统。
- 发送到目前为止所有事件的命令。
安装
您可以使用 composer 需求最新版本的包
composer require softonic/laravel-transactional-event-publisher
配置
您可以在 vendor/softonic/transactional-event-publisher/config/transactional-event-publisher.php
中配置基本 AMQP 信息。
如果您需要进一步定制,您可以将配置发布。
php artisan vendor:publish --provider="Softonic\TransactionalEventPublisher\ServiceProvider" --tag=config
我们提供 Softonic\TransactionalEventPublisher\EventStoreMiddlewares\DatabaseMiddleware
和 Softonic\TransactionalEventPublisher\EventStoreMiddlewares\AmqpMiddleware
中间件来存储和发送事件。
数据库中间件
此中间件仅将事件存储在数据库的表中。如果您想将事件作为 REST 端点公开或检查事件历史记录,这可能会很有用。
要配置此中间件,您需要发布迁移
php artisan vendor:publish --provider="Softonic\TransactionalEventPublisher\ServiceProvider" --tag=migrations
并执行它们
php artisan migrate
AMQP 中间件
该中间件将事件发布到AMQP系统中。您只需使用配置文件或环境变量配置AMQP连接即可。如您所见,在配置中您无法定义队列。这是因为库只是将消息发布到交换机,而事件收集器的责任是声明所需的队列以及所需的绑定。
批量发布事件以提高性能
我们提供了一个命令来持续批量发布事件。您可以在 Softonic\TransactionalEventPublisher\Console\Commands\EmitEvents
中找到其签名。它将默认以100条事件为一批发布事件,或者您可以使用 --batchSize
选项来更改它。您只需创建一个无限运行的作业,使用命令 php artisan event-sourcing:emit
。
发送数据库中存储的所有事件
默认情况下,命令 php artisan event-sourcing:emit
将使用 MySQL无缓冲连接 发送数据库中存储的所有事件。否则,将使用MySQL缓冲连接从数据库中删除已发送的事件。
您可以使用 --dbConnection
选项指定要使用的缓冲连接,对于无缓冲连接使用 --dbConnectionUnbuffered
。以下是从 config/database.php
中的无缓冲连接示例:
return [ 'connections' => [ 'mysql-unbuffered' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, 'options' => [ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false, ], ], ] ];
注册模型
要选择应发送领域事件的模型,您需要附加 \Softonic\TransactionalEventPublisher\ModelObserver
观察者类。
示例
...
use App\Models\Post as MyModel;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Softonic\TransactionalEventPublisher\Observers\ModelObserver;
class EventServiceProvider extends ServiceProvider
{
public function boot()
{
parent::boot();
MyModel::observe(ModelObserver::class);
}
...
}
自定义中间件
中间件应实现 Softonic\TransactionalEventPublisher\Interfaces\EventStoreMiddlewareInterface
接口。其目的是存储提供的领域事件,因此您可以为领域事件实现任何存储。
自定义消息
必须实现 transactional-event.messageBuilder
类以实现 EventMessageBuilderInterface
,并且必须实现 transactional-event.middleware
类以实现 EventStoreMiddlewareInterface
。
构建器应返回一个 EventMessageInterface
值对象。它只需要实现具有所需所有属性的 toArray
和 jsonSerialize
方法。
注意事项
该软件包在以下Eloquent模型事件中开始数据库事务:
- 创建
- 更新
- 删除
当事件存储中间件成功存储事件消息时,提交数据库事务。另一方面,如果事件存储无法存储事件消息,则对两个操作(Eloquent模型写入+事件消息存储)进行数据库回滚。请考虑如果在创建/更新/删除事件和创建/更新/删除之间发生错误,则事务将保持启动状态,直到连接关闭。
测试
softonic/laravel-transactional-event-publisher
有一个 PHPUnit 测试套件,以及一个使用 PHP CS Fixer 的编码风格合规性测试套件。
要从项目目录中运行测试,请运行以下命令。
$ make tests
要在开发环境中打开终端
$ make debug
许可证
Apache 2.0许可证。有关更多信息,请参阅 LICENSE。