shipmate-io / laravel-shipmate
从您的Laravel代码中与Shipmate交互
Requires
- php: ^8.0
- illuminate/contracts: ^9.0|^10.0|^11.0
- shipmate-io/shipmate: ^1.0.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-10 07:57:53 UTC
README
安装
您可以通过composer安装此包
composer require shipmate-io/laravel-shipmate
作业队列
将新的队列连接添加到您的config/queue.php
文件
'shipmate' => [ 'driver' => 'shipmate', 'default_queue' => 'default', 'queues' => [ 'default' => [ 'name' => env('SHIPMATE_DEFAULT_JOB_QUEUE_NAME'), 'worker_url' => env('SHIPMATE_DEFAULT_JOB_QUEUE_WORKER_URL'), ], ], ],
更新环境变量QUEUE_CONNECTION
QUEUE_CONNECTION=shipmate
消息队列
消息队列的配置在config/message-queue.php
文件中。
return [ /* * The message queues that are available to your service. */ 'queues' => [ 'default' => env('SHIPMATE_DEFAULT_MESSAGE_QUEUE_NAME'), ], /* * The file within your code base that defines your message handlers. */ 'message_handlers' => base_path('routes/messages.php'), /* * Whether to register the routes required to handle the messages from the message queues. */ 'register_routes' => true, ];
您可以通过运行以下Artisan命令来发布此文件
php artisan vendor:publish --tag="shipmate-config"
消息是一个简单的类,它实现了Shipmate\LaravelShipmate\MessageQueue\ShouldPublish
接口。
use Shipmate\LaravelShipmate\MessageQueue\ShouldPublish; class UserCreated implements ShouldPublish { public function publishOn(): string { return 'default'; } public function publishAs(): string { return 'user.created'; } public function publishWith(): array { return [ 'first_name' => 'John', 'last_name' => 'Doe', ]; } }
要发布消息到消息队列,您可以使用Laravel的事件助手将其派发。
event(new UserCreated);
消息队列将通过HTTP请求将此消息传递到您的应用程序中的其他服务。为了接受此请求,该包会自动在您的服务中注册以下路由。
Route::post('shipmate/handle-message', [Shipmate\LaravelShipmate\MessageQueue\MessageQueueController::class, 'handleMessage']); Route::post('shipmate/handle-failed-message', [Shipmate\LaravelShipmate\MessageQueue\MessageQueueController::class, 'handleFailedMessage']);
接下来,该包会在您的服务的routes/messages.php
文件中查找与消息类型相对应的处理程序。该文件的格式应如下所示
<?php return [ 'user.created' => HandleUserCreatedMessage::class, 'user.deleted' => [HandleUserDeletedMessage::class, 'handle'], ];
该文件必须返回一个关联数组,其中
- 键是应用程序希望接收的消息类型
- 值是处理这种类型传入消息的应用程序中的类
消息处理程序可以以下两种方式定义
-
通过引用一个类
'user.created' => HandleUserCreatedMessage::class,
在这种情况下,该包会在类中查找一个接受
Shipmate\Shipmate\MessageQueue\Message
作为参数的公共方法。此方法可以是任何名称,如下所示use Shipmate\Shipmate\MessageQueue\Message; class HandleUserCreatedMessage { public function __invoke(Message $message): void { $firstName = $message->payload['first_name']; // } } class HandleUserCreatedMessage { public function handle(Message $message): void { $firstName = $message->payload['first_name']; // } } class HandleUserCreatedMessage { public function execute(Message $message): void { $firstName = $message->payload['first_name']; // } }
-
通过引用一个类和一种方法
'user.created' => [HandleUserCreatedMessage::class, 'handle'],
如果未为特定类型的消息注册处理程序,则该消息将被丢弃。
存储桶
将新的磁盘添加到您的config/filesystems.php
文件
'shipmate' => [ 'driver' => 'shipmate', 'bucket' => env('STORAGE_BUCKET_NAME'), 'visibility' => 'public', // public or private ],
从您的存储桶存储和检索文件
$disk = Storage::disk('shipmate'); $disk->put('avatars/1', $fileContents); $exists = $disk->exists('file.jpg'); $time = $disk->lastModified('file1.jpg'); $disk->copy('old/file1.jpg', 'new/file1.jpg'); $disk->move('old/file1.jpg', 'new/file1.jpg'); $url = $disk->url('folder/my_file.txt'); $url = $disk->temporaryUrl('folder/my_file.txt', now()->addMinutes(30)); $disk->setVisibility('folder/my_file.txt', 'public');
有关可用功能的完整列表,请参阅https://laravel.net.cn/docs/master/filesystem
变更日志
有关最近更改的更多信息,请参阅CHANGELOG
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件