簡體   English   中英

設置和使用php-resque的正確方法是什么?

[英]What is the proper way to setup and use php-resque?

我正在嘗試使用php-resque在我的服務器上排隊並執行ffmpeg轉換。 我廣泛理解它應該如何工作,但我在細節方面有些麻煩,找不到任何教程。 具體來說,我不明白我應該在哪里上課,以及如何將課程交給我的工人並開始我的工作。 我讀到的只是說“讓你的應用程序正在進行中,還包括通過自動加載器或包括它們告訴工人你的工作類。”

希望有人可以概述使用php-resque的整體結構。

你可以把你的工作班放在你想要的地方。 這取決於您的應用程序結構。

如何創建一個工作類

例如,假設用於ffmpeg轉換的類VideoConversion

class VideoConversion {

    public function perform() {
        // The code for video conversion here
    }

}

在你的主應用程序中,在使用php-resque之前,假設你有類似的東西

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Convert the video
}

而你想要將“轉換視頻”部分排入隊列。 讓我們convert它排隊到convert隊列:

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Let's suppose you need to convert a 'source video' to a 'destination video'
    Resque::enqueue('convert', 'VideoConversion', array('origine-video.avi', 'destination-video.avi'));
}

排隊作業時,我們將源視頻和目標視頻的路徑傳遞給VideoConversion類。 您可以傳遞其他參數,它取決於您的VideoConversion類的編寫方式。

然后,工作人員將輪詢convert隊列,並執行VideoConversion作業。 工作人員將做的是實例化VideoConversion類,並執行perform()方法。

作業參數( array('origine-video.avi', 'destination-video.avi') ),使用Resque::enqueue排隊作業時的第三個參數,將通過$this->argsperform()方法中可用$this->args

# VideoConversion.php
class VideoConversion
{
    public function perform() {
    // $this->args == array('origine-video.avi', 'destination-video.avi');
    // Convert the video
}

找到你的工作類

VideoConversion類可以放在任何地方,但你必須告訴你的工人在哪里找到它。 有多種方法可以做到這一點

將作業類放在include_path中

在.htaccess或apache配置中,將包含所有作業類的目錄添加到包含路徑。 您的員工會自動找到他們。

此方法的主要問題是所有作業類必須位於同一文件夾中,並且所有作業類都可在任何位置使用。

告訴每個工人在哪里找到你的工作類

啟動worker時,使用APP_INCLUDE參數指向作業類的“autoloader”。

APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php

上面的命令將啟動一個新的worker,輪詢名為convert的隊列。 我們還將文件/path/to/autoloader.php傳遞給worker。 見這里學習創辦工人

從技術上講,工作人員將包含該文件include '/path/to/autoloader.php';

然后,您可以告訴工人如何找到您的工作類:

使用基本包含

在'/path/to/autoloader.php'中:

include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...

使用自動加載器

使用php autoloader加載你的工作類。

使用set_include_path()

set_include_path('path/to/job');

這樣,你的工作就在這個工人的include_path

結束思考

APP_INCLUDE綁定到您正在啟動的工作人員。 如果您正在啟動另一個工作人員, APP_INCLUDE再次使用APP_INCLUDE 您可以為每個工作人員使用不同的文件。

您還可以設計工作類以執行多個作業。 有一個教程解釋如何做到這一點。 它涵蓋了從隊列系統的基礎到如何使用和實現它。

如果仍然不夠,請查看resque文檔。 php-resque API完全相同。 唯一的區別是Resque工作類是用Ruby編寫的,而php-resque是用PHP編寫的。

嗨請查看以下教程,了解如何使用phalcon resque。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM