【问题标题】:Laravel queue with Amazon SQS set up message带有 Amazon SQS 设置消息的 Laravel 队列
【发布时间】:2018-09-24 00:19:16
【问题描述】:

我正在使用 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 自动设置的。 问题是:如何修改消息?

【问题讨论】:

  • 你到底想修改什么?您的 ImageProcesser 将被序列化并传递,因此您可以在每个作业中定义任何内容。
  • 我想在“消息”数组中添加其他键/值。有什么方法吗?
  • @Jamesking56 。 . .

标签: php laravel amazon-web-services queue amazon-sqs


【解决方案1】:
$this->dispatch(new ImageProcessor($param1, $param2, ['additional_data' => 'here']));

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

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

如果您想一次性发送多条消息,您将为此编写自己的逻辑。如果您想在 Laravel 以外的任何其他平台上使用队列消息,则相同。

【讨论】:

  • 我已在 ImageProcessor 调用中添加了参数变量,但在消息中看不到它们
  • 1) 您传递的变量是否设置为非空? 2)当您启动队列侦听器时,您是否在另一端接收参数? 3) 你为什么这么关心信息本身的内容?你当初为什么要修改它?
  • 我关心消息内容,因为我想在消息中放入处理程序在工作时需要的信息。但也许我理解处理程序不是从消息本身获取这些数据
  • Laravel 中的队列系统的构建方式是您不必这样做 - 框架以完成工作所需的方式创建消息,而您没有(大部分)担心 SQS 消息内容。如果您将其他参数传递给您的工作,但在另一端没有收到它们,请尝试使用php artisan queue:restart 重新启动您的队列,如果它仍然无法正常工作,请更新您的答案并发布您无法正常工作的新代码。
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2019-02-14
  • 2013-10-17
  • 2019-12-31
  • 2014-10-10
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多