2017-02-07 10 views
0

ギアマンを実行すると、1人のサーバで3人のワーカーがうまく動作しますが、4人目の1人のPHPコードがうまく動作していますが、ジョブキューをクリアしません。同じサーバで3人以上のギアマン作業員を実行することはできません

protected function createWorker() 
{ 
    $this->worker = new \GearmanWorker(); 
    $config = $this->app->config->job_remote; 
    $this->worker->addServer($config['host'], $config['port']); 
    return $this->worker; 
} 
public function listen($eventType, $callback) 
{ 
    if (!($this->worker instanceof \GearmanWorker)){ 
     $this->worker = $this->createWorker(); 
    } 
    $this->worker->addFunction($eventType, $callback); 
    return $this->worker; 
} 

public function doWork($worker) 
{ 
    if (!($worker instanceof \GearmanWorker)){ 
     $worker = $this->createWorker(); 
    } 
    $this->worker = $worker; 
    while (1) { 
     $this->worker->work(); 
     $this->app->log->debug($this->worker->returnCode()); 
     if ($this->worker->returnCode() != \GEARMAN_SUCCESS) { 
      break; 
     } 
    } 
} 

まず私は、メソッドとし、 'doWork' メソッド

クライアント側のコード '聞く' 呼び出しています:あなたがいない任意の件まで実行することができますGearmanManagerを使用

protected function createClient() 
    { 
     $this->client = new \GearmanClient(); 
     $config = $this->app->config->job_remote; 
     $this->client->addServer($config['host'], $config['port']); 
     return $this->client; 
    } 

    public function addTask($eventType, array $params) 
    { 
    if (!($this->client instanceof \GearmanClient)){ 
     $this->client = $this->createClient(); 
    } 
    // add single task in queue 
    $this->client->addTaskBackground($eventType, serialize($params)); 
    // Run task 
    $this->client->runTasks(); 
    } 
+0

あなたのコードはどこにありますか?何を試しましたか –

+0

コードを追加しました。 –

+0

あなたのクライアントコードはどこですか?どこから仕事を割り当てるか。 –

答えて

0

を。あなたのコンピュータを減速させ、100%のCPUと100%のメモリを使用するまで、

Gearman.ini

[GearmanManager] 
worker_dir=./workers 
count=50 
dedicated_count=1 
max_worker_lifetime=3600 
auto_update=1 
log_file=./logs/WebAnalyzerWorker.log 
max_runs_per_worker=3 
timeout=600 

実行Gearmanワーカー

./vendor/brianlmoon/gearmanmanager/pecl-manager.php -c ./gearman.ini -vvvvv 

労働者階級

<?php 

include dirname(__DIR__)."/vendor/autoload.php"; 

use Services\Log; 
use Services\ServiceInitialization; 
use Lib\Technology\FindWhoisRecords; 
use Illuminate\Database\Capsule\Manager as Capsule; 

class DomainDetailFetchJob{ 

    public function beforeRun() 
    { 
     ServiceInitialization::loadConfig(); 
     ServiceInitialization::loadDatabaseConfiguration(); 
    } 

    public function run($job, &$log) 
    { 
     $log[] = "Starting whois job"; 
     $collection = "whois"; 
     $this->beforeRun(); 
     ServiceInitialization::$config->all();   
     $workload = $job->workload(); 
     //workload 
     $whois = new FindWhoisRecords($workload); 
     if($whois->whois_result["err_code"]==0) { 
      $log[] = "Whois Info fetch successful"; 
      //success save the details 
      $whois->whois_result["result"]["workload"] = $workload; 
      Capsule::table($collection)->where("workload", $workload)->update($whois->whois_result["result"], ['upsert' => true]); 

     } 
     else { 
      $log[] = "Whois Info fetch failed"; 
      $logger = new Log(); 
      $logger->write($whois->whois_result["err_msg"], "error", "Whois Record Job"); 
      unset($logger); 
     } 
    } 

} 

Gearmanクライアント

$client = new GearmanClient(); 
$client->addServer(); 
$client->doBackground("DomainDetailFetchJob", $url); 
関連する問題