2016-07-21 5 views
2

私はカフカメッセージを消費するPHPアプリケーションを持っています。 カフカに新しいメッセージがあることを知る方法は問題ですか? 最初の解決策は、コンシューマーをPHPで作成し、それをループで実行して新しいメッセージをチェックすることです。このようなものカフカ - 新しいメッセージを見る方法

<?php 

namespace MyAppBundle\Command; 

use MyAppBundle\EventSourcing\EventSerializer\JSONEventSerializer; 
use MyAppBundle\Service\EventProjectorService; 
use MyAppBundle\Service\KafkaService; 
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 
use Symfony\Component\Process\Exception\RuntimeException; 

class EventCommand extends ContainerAwareCommand 
{ 
    protected function configure() 
    { 
     $this 
      ->setName('events:fetch'); 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) 
    { 
     /** @var KafkaService $kafkaService */ 
     $kafkaService = $this->getContainer()->get('store_locator.kafka_service'); 
     /** @var EventProjectorService $eventProjector */ 
     $eventProjector = $this->getContainer()->get('store_locator.event_projector'); 

     while(1){ 
      $messages = $kafkaService->fetchEvents(); 

      foreach ($messages as $message) { 
       $eventProjector->aggregate($message); 
      } 
     } 
     $output->writeln("Finish"); 
    } 
} 

しかし、私はそれが好きではありません...他の方法はありますか?

良い方法がない場合は、それをどのように実行するのですか?たとえば、何かが失敗したとき。

+0

私は現時点でSymfony/Kafkaソリューションを実際に探しています。カフカのサービスコードを共有する機会はありますか? – nealio82

+0

@Nealio私はあなたが必要とするものは正確にはわかりませんが、 'nmred/kafka-php'パッケージを使用しており、READMEに記載されているようにすべてを実装しています。 – PiotrCh

答えて

1

私が知る限り、無限にループして新しいメッセージをチェックするよりも良い方法はありません。一般的なアプローチは、一定の時間または反復回数の後にタスクを終了させて​​から、すべてのリソースを奪うのを防ぐために、死を検出して消費者を復活させるためにsupervisordのようなものを使用することです。

+0

私は同様の結果を得ているので、それが最良の解決策であると仮定することができます。 1. supervisordを使ってサービスが稼働していることを確認してください。 2.適切なロガーを設定してください(オプション) 3.時折サービスを停止して再実行してください。 – PiotrCh

関連する問題