2016-08-22 5 views
2

Laravelで書かれた従来のAPIがあり、RabbitMQキューからデータを送信しようとしています。私はサードパーティライブラリを使用して、RabbitMQをネイティブのLaravel Queueアーキテクチャに統合しています。どちらがうまくいき、リスナーコンソールコマンドが実行されているときにメッセージを正しく処理しています。しかし外部サービスのLaravelキューリスナー

、私はキュー・ハンドラによって必要とされる仕事とデータのキーを含む次のイベントを、渡す...

{"job":"SixtyFiveContrib\\Jobs\\[email protected]","data":{"title":"","story":"Testing 123","author":"Ewan Valentine","email":"","address":"","dob":"","phone":"","site":"The Lad Bible","legal":"The LAD bible - Facebook","agreed":false,"signature":"","files":[{"filename":"test.png","filesize":0,"filetype":""}],"agreement":{"id":"","facebook_id":""},"attempts":1036}} 

私はキューに入れられたイベントを処理するクラスに気づくには、クラスパスを分割しますメソッド名(SixtyFiveContrib \ Jobs \ CreateSubmissionMetaDataJobとハンドル)を取得し、そのクラスをコンテナから呼び出そうとします。

しかしジョブは自動的にコンテナの一部ではありません。私は容器の中に自分自身をジョブを追加しようとすると、私は省略した場合、私は

$this->app->bind(\SixtyFiveContrib\Jobs\CreateSubmissionMetaDataJob::class, function() { 
    return \SixtyFiveContrib\Jobs\CreateSubmissionMetaDataJob(????); 
}); 

...私は動的例えば、仕事にキューから「データ」を渡すことができない状況に遭遇しますコンテナからこのエントリは、キュー・ハンドラは、もはや仕事を解決することはできません、私は次のエラーが...


解決できない依存関係の解決[パラメータ#0 [\契約\コンテナ\ BindingResolutionExceptionを照らす]取得します[$ data]]クラスSixtyFiveContrib \ Jobs \ CreateSubmissionMetaの DataJob

ここは私の職業分類です(機密ビジネスロジックは省略されています)。

<?php 

namespace SixtyFiveContrib\Jobs; 

use App; 

use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Bus\SelfHandling; 
use Illuminate\Contracts\Queue\ShouldQueue; 

use SixtyFiveContrib\Jobs\Job; 

/** 
* CreateSubmissionsMetaDataJob 
* 
* @author Ewan Valentine <[email protected]> 
* @copyright The LAD bible Group - 2016 
*/ 
class CreateSubmissionMetaDataJob extends Job implements SelfHandling 
{ 
    use InteractsWithQueue, SerializesModels; 

    /** 
    * @var array $data 
    */ 
    public $data; 

    /** 
    * __construct 
    * 
    * @param array $this->data 
    */ 
    public function __construct($data) 
    { 
     $this->data = $data; 
    } 

    public function handle() 
    { 
     try { 

      // Omitted 
     } catch (\Exception $e) { 
      \Log::error($e->getMessage() . " " . $e->getLine()); 
      return $e->getMessage(); 
     } 
    } 
} 

答えて

1

わかりました。データは、handleまたはfireメソッドに2番目のパラメータとして渡す必要があります。最初の引数はアプリケーションインスタンスです。

<?php 

namespace SixtyFiveContrib\Jobs; 

use App; 

use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Bus\SelfHandling; 
use Illuminate\Contracts\Queue\ShouldQueue; 

use SixtyFiveContrib\Jobs\Job; 

/** 
* CreateSubmissionsMetaDataJob 
* 
* @author Ewan Valentine <[email protected]> 
* @copyright The LAD bible Group - 2016 
*/ 
class CreateSubmissionMetaDataJob extends Job implements SelfHandling 
{ 
    use InteractsWithQueue, SerializesModels; 

    /** 
    * @var array $data 
    */ 
    public $data; 

    /** 
    * __construct 
    */ 
    public function __construct() 
    { 
    } 

    public function handle($app, array $data) 
    { 
     try { 

      // Omitted 
     } catch (\Exception $e) { 
      \Log::error($e->getMessage() . " " . $e->getLine()); 
      return $e->getMessage(); 
     } 
    } 
} 
+1

私はまもなく同様のことを試みているかもしれないので、これに非常に興味があります。あなたはこれをいくつか共有したいと思いますか? – caro

関連する問題