dusterio/laravel-plain-sqs

为Laravel提供支持自定义格式JSON的自定义SQS连接器

v0.1.25 2023-04-28 06:15 UTC

README

Build Status Code Climate Total Downloads Latest Stable Version Latest Unstable Version License

Laravel的自定义SQS连接器(或Lumen),支持自定义格式JSON有效负载。默认情况下,Laravel期望SQS消息以特定格式生成 - 包含作业处理器类和序列化作业的格式。

但在某些情况下,您可能希望解析来自第三方应用程序、自定义JSON消息等的消息。

依赖项

  • PHP >= 5.5
  • Laravel(或Lumen)>= 5.2

通过Composer安装

要安装,只需运行

composer require dusterio/laravel-plain-sqs

或手动添加到composer.json

{
    "require": {
        "dusterio/laravel-plain-sqs": "~0.1"
    }
}

Laravel 5中的使用

// Add in your config/app.php

'providers' => [
    '...',
    'Dusterio\PlainSqs\Integrations\LaravelServiceProvider',
];

Lumen 5中的使用

// Add in your bootstrap/app.php
$app->loadComponent('queue', 'Dusterio\PlainSqs\Integrations\LumenServiceProvider');

配置

// Generate standard config file (Laravel only)
php artisan vendor:publish

// In Lumen, create it manually (see example below) and load it in bootstrap/app.php
$app->configure('sqs-plain');

编辑config/sqs-plain.php以满足您的需求。此配置将SQS队列与处理器类匹配。

return [
    'handlers' => [
        'base-integrations-updates' => App\Jobs\HandlerJob::class,
    ],

    'default-handler' => App\Jobs\HandlerJob::class
];

如果队列未在'handlers'数组中找到,则将SQS有效负载传递给默认处理器。

将sqs-plain连接添加到您的config/queue.php中,例如

        ...
        'sqs-plain' => [
            'driver' => 'sqs-plain',
            'key'    => env('AWS_KEY', ''),
            'secret' => env('AWS_SECRET', ''),
            'prefix' => 'https://sqs.ap-southeast-2.amazonaws.com/123123/',
            'queue'  => 'important-music-updates',
            'region' => 'ap-southeast-2',
        ],
        ...

在您的.env文件中,选择sqs-plain作为您的新默认队列驱动程序

QUEUE_DRIVER=sqs-plain

向SQS发送

如果您计划从Laravel或Lumen推送纯文本消息,则可以依赖DispatcherJob

use Dusterio\PlainSqs\Jobs\DispatcherJob;

class ExampleController extends Controller
{
    public function index()
    {
        // Create a PHP object
        $object = [
            'music' => 'M.I.A. - Bad girls',
            'time' => time()
        ];

        // Pass it to dispatcher job
        $job = new DispatcherJob($object);

        // Dispatch the job as you normally would
        // By default, your data will be encapsulated in 'data' and 'job' field will be added
        $this->dispatch($job);

        // If you wish to submit a true plain JSON, add setPlain()
        $this->dispatch($job->setPlain());
    }
}

这将推送以下JSON对象到SQS

{"job":"App\\Jobs\\HandlerJob@handle","data":{"music":"M.I.A. - Bad girls","time":1462511642}}

'job'字段实际上没有使用。它只是保留以保持兼容性。

从SQS接收

如果第三方应用程序正在创建自定义格式的JSON消息,只需在配置文件中添加一个处理器,并按照以下方式实现处理器类

use Illuminate\Contracts\Queue\Job as LaravelJob;

class HandlerJob extends Job
{
    protected $data;

    /**
     * @param LaravelJob $job
     * @param array $data
     */
    public function handle(LaravelJob $job, array $data)
    {
        // This is incoming JSON payload, already decoded to an array
        var_dump($data);

        // Raw JSON payload from SQS, if necessary
        var_dump($job->getRawBody());
    }
}

待办事项

  1. 添加更多单元测试和集成测试

视频教程

我刚刚开始了一个教育YouTube频道,该频道将涵盖软件开发和DevOps中的顶级IT趋势:config.sys

许可协议

MIT许可(MIT)版权所有(c)2016 Denis Mysenko

特此免费授予任何获得本软件及其相关文档副本(以下简称“软件”)的人权,在不受限制的情况下使用该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向提供软件的人使用本软件,前提是符合以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适用性的、特定用途的和非侵权的,包括但不限于适用性、特定用途和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是因合同、侵权或其他原因引起的,以及与软件或其使用或其它交易有关的任何索赔、损害或其他责任。