小编Rub*_*ert的帖子

Laravel:同步队列系统

我正在尝试建立一个API,该API使用另一台服务器上的队列系统来处理请求。让我开始尝试在没有队列系统的情况下要完成的工作(无权使其保持简单):例如,使用Postman对URL https://example.com/products进行GET请求,将返回JSON字符串,例如

[
    {
        "id": 1,
        "name": "some name",
        ...
    },
    {
        "id": 2,
        "name": "some other name",
        ...
    }.
    ...
]
Run Code Online (Sandbox Code Playgroud)

route / api.php中的代码将类似于:

<php

Route::get('/products', ProductController@index');
Run Code Online (Sandbox Code Playgroud)

以及app / Http / Controllers / ProductController.php中的代码:

<?php

namespace App\Http\Controllers;

class ProductController extends Controller
{
    /**
     * Return the products.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // Logic to get the products.
        return $products->toJson();
    }
}
Run Code Online (Sandbox Code Playgroud)

我要完成的工作是,所有业务逻辑都在另一台运行多个工作程序的服务器上进行处理。以下是我对此的推理。

  • 安全性:万一我们被黑,它很可能是客户端服务器,而不是辅助服务器。由于最后一个具有所有业务逻辑,因此在最坏的情况下,黑客将只能获取传入和传出的请求数据。
  • 多个工作人员:获得产品可能不会花费很长时间,但是可能还有其他要求需要更多时间来处理。在大多数情况下,发出请求的用户将必须等待结果。但是,其他拨打电话的用户不必等待。因此,另一名工人可以接受此请求并处理工作。

这就是我所看到的工作流程:

  • 所有的免费工人都在不停地轮询队列中的工作

    1. 用户提出要求
    2. 客户端服务器接收请求数据并将其放在队列中
    3. 工人从队列中拿出一份工作并处理
    4. 工作程序将结果返回到客户端服务器
    5. 客户端服务器将结果返回给用户

下面是一幅小图,用于清除一切。

  User …
Run Code Online (Sandbox Code Playgroud)

php message-queue beanstalkd redis laravel-5

5
推荐指数
0
解决办法
700
查看次数

标签 统计

beanstalkd ×1

laravel-5 ×1

message-queue ×1

php ×1

redis ×1