Laravel 包含 Amazon SQS 设置消息的队列

Laravel queue with Amazon SQS set up message

我正在使用 Laravel 将消息推送到 Amazon SQS 队列中。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Jobs\ImageProcessor;
use Log;


class ImageProcessorController extends Controller
{

  public function processImage(Request $request){


    Log::info($request->all());
    Log::info("Request Cycle with Queues Begins");
    dispatch(new ImageProcessor());
    Log::info("Request Cycle with Queues Ends");
    echo 'image sent to the queue';

  }


}

结果是队列中的消息如下:

   {
"Messages": [
    {
        "Body": "{\"displayName\":\"App\\Jobs\\ImageProcessor\",\"job\":\"Illuminate\\Queue\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":null,\"timeoutAt\":null,\"data\":{\"commandName\":\"App\\Jobs\\ImageProcessor\",\"command\":\"O:23:\\"App\\Jobs\\ImageProcessor\\":7:{s:6:\\"\u0000*\u0000job\\";N;s:10:\\"connection\\";N;s:5:\\"queue\\";N;s:15:\\"chainConnection\\";N;s:10:\\"chainQueue\\";N;s:5:\\"delay\\";N;s:7:\\"chained\\";a:0:{}}\"}}", 
        "Attributes": {
            "ApproximateFirstReceiveTimestamp": "1523631711067", 
            "SenderId": "AIDAJYZES3ADLCLSKMIP2", 
            "ApproximateReceiveCount": "1", 
            "SentTimestamp": "1523631706715"
        }, 
        "ReceiptHandle": "AQEBJFyXHZdHrHLYPSK5Im2+vdXbyrrixqRbAcDVGAGzbs8re6cHIpoz57nW2g2UY+CfkcDsK66rG+qFh4O0vfmAqcc2YCWExZ+J4ixuIKoseTSmCA9ZKHxLOzRDySkDliC4Nvp6G32qh8om3oGTp3eNLMx+ooGuUTfrWipzdM6SesI04Z5fq9P8CWkCKy+Xe7146Y1eJkD68HGrj8yGxlinT5Ian57qQY2GVdXIbZFsTGz6vqB/3WVOvAGmy+b/xMsFD0SNchZUJnFVW7aCmrqKimtXAkuSbDQIhpHGMr2w1iscWtFY5JCvhiPaapkjKcAxf0luR3ygHppt/cBtTr13BNUPMXCohyGc3hdB1/XXcAF0uww+fYvWVQ8IIsYrV5lT2gpYPzg8j+7Zy7Iv1GBlGuZl6lC213AI5w93I+GEmQc=", 
        "MD5OfBody": "3a84984ce57b8d58162017adc4c2b004", 
        "MessageId": "61e4dfba-6794-48f3-a006-9637c6913553"
    }
]
}

如您所见,消息和属性是由 laravel 自动设置的。 问题是:如何修改消息?

$this->dispatch(new ImageProcessor($param1, $param2, ['additional_data' => 'here']));

如果您需要将更多数据发送到队列处理程序(在本例中为 ImageProcessor),只需将其添加为参数即可。正如您所说,它将自动进行序列化、发送和反序列化。如果我没记错的话,如果你通过了它们,它甚至应该在另一端检索准确的 eloquent 模型。

但是,除了传递附加数据之外,您无法真正更改已提交消息的结构。你的问题是,你为什么要

如果您想一次性发送多条消息,您需要为此编写自己的逻辑。如果您想使用 Laravel.

以外的任何其他平台使用队列消息,则相同