如何在laravel项目中使用kafka和redis?

pw136qt2  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(437)

我一直有问题配置Kafka和redis一起在拉雷维尔。
我可以运行redis来使用内存数据库。所以redis很好用。

$redis = app()->make('redis');
return $redis->get('name1'); // it runs fine returning value of "name1"

我可以在我的windows系统中配置kafka,在那里我可以在终端中生成和使用消息。
已成功将rdkafka配置为php客户端库和扩展。
我在拉雷维尔为Kafka使用的软件包是 "superbalist/laravel-pubsub": "^3.0", "superbalist/php-pubsub-kafka": "^2.0" 链接
下面提到的代码是订阅和使用消息

$pubsub = app('pubsub');
$pubsub->subscribe('test1', function ($message) {
        var_dump($message); // the code just stuck here 
});

浏览器一直在加载,不会停止。我试图调查供应商内部的代码,但得到的答复是不可理解的。
我的环境要求的包

REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379

PUBSUB_CONNECTION=redis

KAFKA_BROKERS=localhost

GOOGLE_CLOUD_PROJECT_ID=your-project-id-here
GOOGLE_CLOUD_KEY_FILE=path/to/your/gcloud-key.json

HTTP_PUBSUB_URI=null
HTTP_PUBSUB_SUBSCRIBE_CONNECTION=redis

如果redis本地服务器和客户机终端都关闭了,我会得到一个错误
从服务器读取行时出错[tcp://localhost:9092]
请让我知道,如果有人已经能够配置他们都在拉威尔。

zd287kbt

zd287kbt1#

对subscribe()方法的调用被阻塞,这意味着脚本将永远不会完成,因此您的浏览器永远不会停止加载。
调用subscribe()的php脚本需要从cli运行,而不是从浏览器运行,因为该代码使用kafka消息,并且需要始终处于活动状态。如果要将消息发布到kafka,则需要使用publish()方法。
根据文件:

// consume messages
// note: this is a blocking call
$adapter->subscribe('my_channel', function ($message) {
    var_dump($message);
});

// publish messages
$adapter->publish('my_channel', 'HELLO WORLD');
$adapter->publish('my_channel', ['hello' => 'world']);
$adapter->publish('my_channel', 1);
$adapter->publish('my_channel', false);

相关问题