Symfoware

Symfowareについての考察blog

BeansTalkd ジョブの優先順位(priority)を変更する

FreeBSD 10.2にBeansTalkd 1.10をインストール。
PHPからの接続をテストしてみました。
FreeBSD 10.2にBeansTalkdをインストールする


BeansTalkdは、投入するキューに対して優先順位を設定できるようです。
使い方を調べてみました。

プログラムはPHP。
ライブラリはこちらを使用します。
https://github.com/davidpersson/beanstalk



優先順位付きでジョブの投入



指定できるpriorityの範囲は、0から4294967295までです。
0に近いほど優先順位が上がります。


こんなプログラムを作成し、最初にpriority:10のジョブを100件、
最後にpriority:1のジョブを1件投入しました。


  1. <?php
  2. require_once('Client.php');
  3. use Beanstalk\Client;
  4. // beanstalkdに接続
  5. $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
  6. $beanstalk->connect();
  7. // --- データの登録
  8. // チューブに接続
  9. $beanstalk->useTube('test');
  10. // priority:10でデータを100件登録
  11. for ($i = 0; $i < 100; $i++) {
  12.     
  13.     $beanstalk->put(
  14.         10, // Jobの優先度
  15.         0, // 即時実行するか
  16.         1, // Jobの実行時間(秒)
  17.         "priority-10-{$i}" // Jobのデータ
  18.     );
  19. }
  20. // 最後にpriority:1でデータを1件登録
  21. $beanstalk->put(
  22.     1, // Jobの優先度
  23.     0, // 即時実行するか
  24.     1, // Jobの実行時間(秒)
  25.     "priority-1" // Jobのデータ
  26. );
  27. // 切断
  28. $beanstalk->disconnect();




取り出し側のプログラムはこんな感じになります。


  1. <?php
  2. require_once('Client.php');
  3. use Beanstalk\Client;
  4. // beanstalkdに接続
  5. $beanstalk = new Client(array('host'=>'192.168.1.102', 'port' => 11300));
  6. $beanstalk->connect();
  7. // --- データの取り出し
  8. // testチューブを監視
  9. $beanstalk->watch('test');
  10. // ジョブの内容を取得&ロック
  11. $job = $beanstalk->reserve();
  12. // 取得できた内容を表示
  13. var_dump($job);
  14. // ジョブを処理したので削除
  15. $beanstalk->delete($job['id']);
  16. // 切断
  17. $beanstalk->disconnect();







実行結果



1件ずつデータを取り出して確認してみます。
狙い通り、最後に登録したpriority:1のデータが最初に取り出せました。


$ php pulljob.php
array(2) {
["id"]=>
int(304)
["body"]=>
string(10) "priority-1"
}




続いて、priority:10のデータが順番に取り出せます。
狙い通りの動作です。


$ php pulljob.php
array(2) {
["id"]=>
int(204)
["body"]=>
string(13) "priority-10-0"
}

$ php pulljob.php
array(2) {
["id"]=>
int(205)
["body"]=>
string(13) "priority-10-1"
}

$ php pulljob.php
array(2) {
["id"]=>
int(206)
["body"]=>
string(13) "priority-10-2"
}





機能としては知っていましたが、実際試したのは初めてです。
これは便利。


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/10/24(土) 19:00:47|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PHP 指定バイト数でファイルを分割&結合する | ホーム | FreeBSD 10.2にBeansTalkdをインストールする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1808-87422c15
この記事にトラックバックする(FC2ブログユーザー)