如何在laravel类文件中使用动态扩展php.ini

时间:2017-06-05 08:00:13

标签: php laravel apache-kafka

我一直在学习kafka和laravel。

所以我试图在laravel中实现kafka(使用rdkafka),但我遇到了问题

当我尝试在php中使用kafka时,一切都在纯php中正常工作,但是当我尝试在laravel中作为命令类实现它时出现错误

$conf = new RdKafka\Conf(); 

我认为这是问题, RdKafka是php.ini中的动态扩展(我直接从php.ini手动添加它)并且当我尝试在laravel中实现并且我不知道如何解决它时变得不确定。

如何在laravel中使用动态扩展?

这是rdkafka的命令类和消费者功能教程

namespace App\Console\Commands;
use Illuminate\Console\Command;

class ExampleCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {

        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $conf = new RdKafka\Conf();


        $conf->set('group.id', 'myConsumerGroup');

        $rk = new RdKafka\Consumer($conf);
        $rk->addBrokers("127.0.0.1");

        $topicConf = new RdKafka\TopicConf();

        $topicConf->set('auto.commit.interval.ms', 100);
        $topicConf->set('offset.store.method', 'file');
        $topicConf->set('offset.store.path', sys_get_temp_dir());


        $topicConf->set('auto.offset.reset', 'smallest');

        $topic = $rk->newTopic("test", $topicConf);


        $topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);

        while (true) {
            $message = $topic->consume(0, 120*10000);
            switch ($message->err) {
                case RD_KAFKA_RESP_ERR_NO_ERROR:
                    var_dump($message);
                    break;
                case RD_KAFKA_RESP_ERR__PARTITION_EOF:
                    echo "No more messages; will wait for more\n";
                    break;
                case RD_KAFKA_RESP_ERR__TIMED_OUT:
                    echo "Timed out\n";
                    break;
                default:
                    throw new \Exception($message->errstr(), $message->err);
                    break;
            }
        }

    }
}

我从artisan命令得到的错误

[Symfony\Component\Debug\Exception\FatalThrowableError]  
Class 'App\Console\Commands\RdKafka\Conf' not found 

1 个答案:

答案 0 :(得分:0)

我正在使用PHPStorm并且IDE识别命名空间时遇到了同样的问题。我终于发现我需要安装IDE的存根来识别扩展名称空间。扩展实际上工作(\ RdKafka)。只是在安装存根之前IDE没有识别命名空间。

https://github.com/kwn/php-rdkafka-stubs