摘要: 消息隊列是個好東西,各類×××MQ不少。然而看一下它們的文檔,你得嚇尿,什麼鬼,我只是想用它觸發個短信接口而已。 幸虧也有簡單的。此次是php-resquephp
sudo apt-get install composer
redis是個數據庫,nosql。不是廢話,由於有人的確不知道linux
sudo apt-get install redis-server
sudo apt-get install git
cd /your/www/path git clone git://github.com/chrisboulton/php-resque.git cd php-resque composer install
不出意外的話能安裝成功,抽風就多試幾回,包不大,可忍受git
網上有些demo,都是抄的同一個博文,爾等能找到這裏極可能是那一篇看了以爲不大對頭。 composer安裝的包裏面有demo,裏面的代碼也TM坑的很。因此仍是看我這篇。。。。github
job,工做,就是碎催,接到消息以後幹活的,好,定義明確了redis
<?php // job.php 放在demo目錄裏面,原有的那個刪了算球 class TestJob { public function perform() { echo $this->args['name']; } }
<?php // demo/quere.php 注意,這個是個命令行版,須要在shell中運行,也能夠本身寫個瀏覽器裏能跑的 // 功能,往隊列裏寫一些裝逼犯的名字 if(empty($argv[1])) { die('Specify the name of a job to add. e.g, php queue.php PHP_Job'); } require __DIR__ . '/init.php'; date_default_timezone_set('GMT'); Resque::setBackend('127.0.0.1:6379'); $names = [ '李靈黛','冷文卿','陰露萍','柳蘭歌','秦水支','李念兒','文彩依','柳嬋詩','顧莫言','任水寒','金磨針','丁玲瓏','凌霜華','水笙','景茵夢','容柒雁','林墨瞳','華詩','千湄','劍舞','蘭陵',' 洛離' ]; foreach($names as $name){ $jobId = Resque::enqueue('default', 'TestJob', ['name' => $name]); echo "Queued job " . $jobId . "\n\n"; }``` ## 寫個守護進程腳本 ```php <?php // demo/resque.php照抄原demo,會發現找不到文件,因此能夠照抄我這個 // 這個腳本也是在shell裏跑的,真正應用應該放進開機啓動裏面 date_default_timezone_set('GMT'); require 'bad_job.php'; require 'job.php'; require 'php_error_job.php'; require '/install-path/php-resque/bin/resque';
先啓動守護進程sql
QUEUE=* php demo/resque.php
會有如下輸出shell
#!/usr/bin/env php [notice] Starting worker your-computer-name:10757:*
另開一個終端,鍵入數據庫
php demo/queue.php TestJob
會有相似下面輸出,那些hash串就是任務id了ubuntu
Queued job 4b510e225af5897bd5022fee30d202bf
Queued job d14a2ed9339f739b2dec0e0c64069dd7
Queued job d58a536dab2fde9aa6097b37577bd02a
Queued job 53ed1a64d7d8e9a4fed15a0942587e64
Queued job 178ea9087a159c9c7b74b8d9d87e40c2
Queued job cc5dd2087de6865e613fcfdebd52abbc
Queued job e647351c4a83b04b3d701a5dafa52118
Queued job 3f69bd449888e5adb5984a0d64aeb3ac
Queued job 31e114326c8db42443029e14bd677cdb
Queued job 28404f8202a22ade5d204345596d10e0
Queued job fefcf7c402b09c92de2eac5aa642ca80
Queued job e6ecf1529d97e568c5f80bb330c423f2
Queued job c92e64ca49948e7547a5dacce2f373fb
Queued job 97a504c56d74f7714781318b6d244ae6
Queued job 2f8e51937016fc981e0426fcef5d1643
Queued job db3be312811732803fc5d7b814cc69d4
Queued job 23124e4693146812471c09401137a6fd
Queued job af070ce348f73c6c6fe25782351a1937
Queued job 8825fc73b7881e13067e59d10287b598
Queued job 21e31139c9f70c7097927a80a442a577
Queued job 283a8d6119657dd018a5cc8298021bba
這時你看剛纔運行守護進程的那個終端,會有相似如下輸出,如願輸出了一系列裝逼犯windows
[notice] Starting work on (Job{default} | ID: 3dcf4dc9008d255ab59917a221aaf984 | TestJob | [{"name":"\u674e\u7075\u9edb"}]) 李靈黛[notice] (Job{default} | ID: 3dcf4dc9008d255ab59917a221aaf984 | TestJob | [{"name":"\u674e\u7075\u9edb"}]) has finished [notice] Starting work on (Job{default} | ID: fa2d6bd7a97a77ab754c35822cb8dcd0 | TestJob | [{"name":"\u51b7\u6587\u537f"}]) 冷文卿[notice] (Job{default} | ID: fa2d6bd7a97a77ab754c35822cb8dcd0 | TestJob | [{"name":"\u51b7\u6587\u537f"}]) has finished [notice] Starting work on (Job{default} | ID: 0962a49c4ffd3e987864b2c7e2fdf857 | TestJob | [{"name":"\u9634\u9732\u840d"}]) 陰露萍[notice] (Job{default} | ID: 0962a49c4ffd3e987864b2c7e2fdf857 | TestJob | [{"name":"\u9634\u9732\u840d"}]) has finished [notice] Starting work on (Job{default} | ID: 51ecee3f45d0ba8a906c438ad8ad1887 | TestJob | [{"name":"\u67f3\u5170\u6b4c"}]) 柳蘭歌[notice] (Job{default} | ID: 51ecee3f45d0ba8a906c438ad8ad1887 | TestJob | [{"name":"\u67f3\u5170\u6b4c"}]) has finished [notice] Starting work on (Job{default} | ID: 6dbdf11ee30ab874a94d239d93637671 | TestJob | [{"name":"\u79e6\u6c34\u652f"}]) 秦水支[notice] (Job{default} | ID: 6dbdf11ee30ab874a94d239d93637671 | TestJob | [{"name":"\u79e6\u6c34\u652f"}]) has finished [notice] Starting work on (Job{default} | ID: e566a95f0666dcca8fa30c1ed984434f | TestJob | [{"name":"\u674e\u5ff5\u513f"}]) 李念兒[notice] (Job{default} | ID: e566a95f0666dcca8fa30c1ed984434f | TestJob | [{"name":"\u674e\u5ff5\u513f"}]) has finished [notice] Starting work on (Job{default} | ID: 826cfe9d90f06f06f19c790bae54955d | TestJob | [{"name":"\u6587\u5f69\u4f9d"}]) 文彩依[notice] (Job{default} | ID: 826cfe9d90f06f06f19c790bae54955d | TestJob | [{"name":"\u6587\u5f69\u4f9d"}]) has finished [notice] Starting work on (Job{default} | ID: 106843bea773add35576cb796f5a2036 | TestJob | [{"name":"\u67f3\u5a75\u8bd7"}]) 柳嬋詩[notice] (Job{default} | ID: 106843bea773add35576cb796f5a2036 | TestJob | [{"name":"\u67f3\u5a75\u8bd7"}]) has finished 。。。 。。。 。。。
這裏是個簡單例子,實際上幹啥都行,發短信,發郵件,執行不那麼着急的數據庫操做等等,只管job.php裏面寫個新class便可,往隊列裏些消息的時候注意標明一下參數就行
Resque::enqueue('default', 'ClassName', ['參數一' => $param1, '參數二' => $param2,]);
簡單應用徹底夠了
抄襲自https://my.oschina.net/inuxor/blog/635959