shipmate-io/laravel-shipmate

从您的Laravel代码中与Shipmate交互

3.0.0 2024-04-10 07:11 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'],

];

该文件必须返回一个关联数组,其中

  • 是应用程序希望接收的消息类型
  • 是处理这种类型传入消息的应用程序中的类

消息处理程序可以以下两种方式定义

  1. 通过引用一个类

    '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'];
    
            //
        }
    }
  2. 通过引用一个类和一种方法

    '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)。有关更多信息,请参阅许可文件