好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 如何用RabbitMQ和Swoole實現一個異步任務系統

如何用RabbitMQ和Swoole實現一個異步任務系統

熱門標簽:凱立德地鐵站地圖標注 天津電銷外呼系統違法嗎 上海400客服電話怎么申請 滄州電銷外呼系統價格 手機外呼系統什么原理 銀行信貸電話機器人 合肥ai電銷機器人費用 溫州外呼系統招商 400電話個人能不能辦理

系統介紹

從圖中可以看到,我們這個系統是一個基于事件的異步任務系統。就是說當一個事件產生時,生產者將事件拋給調度器,調度器負責查詢事件下有哪些任務,然后將這些任務丟到相應的隊列中,最后由消費者消費任務隊列中的任務。

在整個系統中主要分為三大部分

1.事件生產者,即產生消息事件的一方。

2.任務調度器(Scheduler),負責注冊事件并調度任務。

3.消費者(Worker),負責消費任務隊列中的任務。

事件生產者

事件生產者很簡單,在業務系統中直接調用即可,代碼如下。

?php
 
require_once DIR.'/../autoload.php';
 
use Asynclib\Ebats\Event;
 
try{
 
    $event = new Event('order_paied');  //定義事件
 
    $event->setOptions(['order_id' => 'FB138020392193312']); //事件產生的參數
 
    $event->publish();
 
}catch (Exception $exc){
 
    echo $exc->getMessage();
 
}

任務調度器

調度器主要做兩件事,一是注冊事件,另一個是調度任務。

注冊事件代碼如下:

//注冊事件
 
EventManager::register('order_create', 'closeOrder', 'demo', 10);//關閉未付款訂單(延遲任務)
 
EventManager::register('order_paied', 'virtualShipping', 'demo'); //虛擬商品自動發貨

這樣就注冊了兩個事件,事件下各有一個任務。

具體調度部分代碼很簡單,就不多贅述,有興趣的可以去看代碼。

消費者

重頭戲來了,一個異步任務系統最重要的就是消費端了,現在讓我們來看下Worker的流程圖。

可以看到,在這里我們采用了兩個交換器和兩個隊列,一個負責處理正常的任務即ntask,另一個負責處理需要延遲執行的任務即dtask。簡單描述下一個任務的生命周期。

正常任務

1、task產生,進入正常任務的交換器Exchange[ebats_core_ntask]

2、交換器根據topic將任務分發到對應的隊列中

3、子進程ntask阻塞等待成功獲取到task,并執行該任務

4、執行失敗,需要重試時拋出RetryException,不需要重試時拋出TaskException

5、子進程ntask捕獲到重試異常將任務拋給延遲任務的交換器Exchange[ebats_core_dtask]

6、將任務執行信息回調給上層開發者以便保存查看

延遲任務

1、子進程dtask阻塞等待成功獲取到task,并執行該任務
2、執行失敗,需要重試時拋出RetryException,不需要重試時拋出TaskException
3、子進程dtask捕獲到重試異常將任務拋給延遲任務的交換器Exchange[ebats_core_dtask]
4、將任務執行信息回調給上層開發者以便保存查看

消費者代碼如下:

require_once DIR.'/../autoload.php';
 
require_once DIR.'/task/TaskDemoModel.php';
 
use Asynclib\Ebats\Worker;
 
  
 
//執行結果回調函數
 
$callback = function ($topic, $taskid, $taskname, $params, $timeuse, $message){
 
  
 
};
 
$worker = new Worker($callback);  //支持多進程消費默認為1
 
$worker->setQueue('demo');  //隊列名和事件的topic一一對應
 
$worker->run();

自定義調度器

一般來說這是一個基于事件的任務系統,那么能不能直接產生任務呢。答案是肯定的。

只需要創建一個自定義調度器,由您自行實現調度邏輯,最終生成一個任務即可。代碼如下:

?php
 
require_once DIR.'/../autoload.php';
 
use Asynclib\Ebats\Task;
 
use Asynclib\Core\Consumer;
 
use Asynclib\Amq\ExchangeTypes;
 
use Asynclib\Exception\ExceptionInterface;
 
  
 
/**
 
 * 本示例演示了如何創建一個自定義調度器,開發者可以根據自身需求開發自己的任務調度器
 
 */
 
try{
 
    $worker = new Consumer();
 
    $worker->setExchange('order_fanout', ExchangeTypes::TOPIC);
 
    $worker->setQueue('shzf_order_paied', ['*.*.WAIT_SELLER_SEND_GOODS']);
 
    $worker->run(function($key, $msg){
 
        $order_data = json_encode($msg);
 
        echo " [$key] $order_data \n";
 
        Task::create('demo', 'orderAsync', $msg);//創建任務,之后消息將作為參數由任務接管處理
 
    });
 
}catch (ExceptionInterface $exc){
 
    echo $exc->getMessage();
 
}

這樣,當接收到消息時就會產生一個orderAsync的任務,您只需要啟動一個用來消費這個Topic的Worker即可。

也許你會覺得這里直接寫業務邏輯的代碼就可以了,實際上也確實可以。當你可以忍受一個進程慢慢消費的時候是可以這樣做的。但大多數情況下我們還是希望它能夠盡快的消費掉,所以建議這里只負責創建任務,具體任務的業務邏輯由worker去執行。

以上就是如何用RabbitMQ和Swoole實現一個異步任務系統的詳細內容,更多關于用RabbitMQ和Swoole實現一個異步任務系統的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • PHP swoole中使用task進程異步的處理耗時任務應用案例分析
  • PHP Swoole異步讀取、寫入文件操作示例
  • PHP Swoole異步Redis客戶端實現方法示例
  • PHP Swoole異步MySQL客戶端實現方法示例
  • php基于 swoole 實現的異步處理任務功能示例
  • PHP swoole和redis異步任務實現方法分析
  • PHP擴展Swoole實現實時異步任務隊列示例
  • Swoole實現異步投遞task任務案例詳解
  • 詳解thinkphp5+swoole實現異步郵件群發(SMTP方式)
  • php異步多線程swoole用法實例

標簽:溫州 七臺河 金華 怒江 酒泉 洛陽 白城 赤峰

巨人網絡通訊聲明:本文標題《如何用RabbitMQ和Swoole實現一個異步任務系統》,本文關鍵詞  如,何用,RabbitMQ,和,Swoole,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何用RabbitMQ和Swoole實現一個異步任務系統》相關的同類信息!
  • 本頁收集關于如何用RabbitMQ和Swoole實現一個異步任務系統的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产传媒色欲AV精品视频| 男人是女人的未来1分59分经典| 特级婬片A片AAA毛片AA做头| 美国xxnx| 玉蒲剧3| 成人性生交大片免费观看软件苹果| 国产毛片一区| 亚洲欧美精品在线| 456成人影院在线观看| 在私人影院里嗯啊h| 帮老师解开蕾丝奶罩吸乳视频| 性色AV天堂一区二区三区| 久久久久久精品一级毛片大道| 粉嫩粉嫩看着都硬了17p| 成人h动漫精品一区二区樱花动漫| 一级a作爱片免费特黄在线大片| 国产成人无码精品久久久APP| 国产福利小视频在线观看| 久久久久久久精品综合棕色| 一个人看的免费视频www中文| 久久99精品久久久学生| 巜锕锕锕锕锕锕好湿视频| 最新欧美zzzooo| 四虎地址8848精品| 漫画h| 欧美伦理电影免费观看高清看完整| 爽?好大?快?深点无码免费看| 台湾果冻传媒国产今日推荐| 69av导航| 中国男帅chinese男男Gay相关网站| 亚洲精品日韩专区silk| 被女同桌扒开裤子握jiji| 法国空乘4无删减版在线| 男女一级大片| 人人揉人人爽五月天视频| 精产一二三产区划分标准图片| 黄蓉的黄色小说| 国产精品免费综合一区视频| 狠狠色丁香婷婷综合久久来 | 亚洲欧美人成人综合在线50p| 免费无码婬片A片AAA毛扒开|