ngmy/laravel-async-await-bus
Composer 安装命令:
composer require ngmy/laravel-async-await-bus
包简介
A Laravel bus decorator that allows to await asynchronous command responses.
README 文档
README
A Laravel bus decorator that allows to await asynchronous command responses.
Installation
composer require ngmy/laravel-async-await-bus
Usage
Command classes must implement the ShouldAwaitResponse interface and use the Respondable trait:
<?php namespace App\Commands; use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Ngmy\LaravelAsyncAwaitBus\Concerns\Respondable; use Ngmy\LaravelAsyncAwaitBus\Contracts\ShouldAwaitResponse; class CreateNewArticleCommand implements ShouldQueue, ShouldAwaitResponse { use InteractsWithQueue, Queueable, SerializesModels, Respondable; public function __construct( public readonly User $user, public readonly string $title, public readonly string $body, public readonly bool $published, ) { } }
Handler classes must contain a handle method or an __invoke method, and must respond using the respond method of
command instances:
<?php namespace App\Handlers\Commands; use App\Commands\CreateNewArticleCommand; class CreateNewArticleCommandHandler { public function handle(CreateNewArticleCommand $command): void { $article = $command->user->articles()->create([ 'title' => $command->title, 'body' => $command->body, 'published' => $command->published, 'published_at' => $command->published ? now() : null, ]); $command->respond($article->id); } }
You need to register command and handler mappings. For example, you can register in the boot method of the
AppServiceProvider class:
use App\Commands\CreateNewArticleCommand; use App\Handlers\Commands\CreateNewArticleCommandHandler; use Illuminate\Contracts\Bus\Dispatcher as Bus; $bus = $this->app->make(Bus::class); $bus->map([ CreateNewArticleCommand::class => CreateNewArticleCommandHandler::class, ]);
Now, you can await asynchronous command responses:
<?php namespace App\Http\Controllers; use App\Commands\CreateNewArticleCommand; use App\Http\Controllers\Controller; use App\Http\Requests\CreateNewArticleRequest; use Illuminate\Contracts\Bus\Dispatcher as Bus; use Illuminate\Http\RedirectResponse; class CreateNewArticle extends Controller { public function __invoke(CreateNewArticleRequest $request, Bus $bus): RedirectResponse { $command = new CreateNewArticleCommand( $request->user(), $request->string('title'), $request->string('body'), $request->boolean('published'), ); $id = $bus->dispatch($command); return redirect("articles/{$id}"); } }
Of course, you can also use self-handling commands:
<?php namespace App\Commands; use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Ngmy\LaravelAsyncAwaitBus\Concerns\Respondable; use Ngmy\LaravelAsyncAwaitBus\Contracts\ShouldAwaitResponse; class CreateNewArticleCommand implements ShouldQueue, ShouldAwaitResponse { use InteractsWithQueue, Queueable, SerializesModels, Respondable; public function __construct( public readonly User $user, public readonly string $title, public readonly string $body, public readonly bool $published, ) { } public function handle(): void { $article = $this->user->articles()->create([ 'title' => $this->title, 'body' => $this->body, 'published' => $this->published, 'published_at' => $this->published ? now() : null, ]); $this->respond($article->id); } }
Changelog
Please see the changelog.
License
Laravel Async Await Bus is open-sourced software licensed under the MIT license.
ngmy/laravel-async-await-bus 适用场景与选型建议
ngmy/laravel-async-await-bus 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 74 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 07 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「cqrs」 「bus」 「command bus」 「Query Bus」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 ngmy/laravel-async-await-bus 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 ngmy/laravel-async-await-bus 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 ngmy/laravel-async-await-bus 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy command bus
rezzza/command-bus integration to Symfony
Interfaces, Traits and Nominal Classes used by Domain Entities Implementing Domain Events
Implementation of the transactional outbox pattern on top of rekalogika/domain-event
Create extendible and maintainable applications by harnessing the power of pipelines.
Symfony bundle for broadway/broadway.
统计信息
- 总下载量: 74
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 32
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-07-17