Как мне использовать kafka и redis в проекте laravel? - PullRequest
0 голосов
/ 17 декабря 2018

У меня были проблемы с настройкой Kafka и Redis вместе в Laravel.

Я могу запустить Redis для использования базы данных в памяти.Так что Redis работает нормально.

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

Я могу настроить Kafka в моей системе Windows, где я могу производить и принимать сообщения в терминалах.

Успешно настроил Rdkafka как клиентскую библиотеку php иextensions.

Пакет, который я использую в Laravel для Kafka: "superbalist/laravel-pubsub": "^3.0", "superbalist/php-pubsub-kafka": "^2.0" LINK

Приведенный ниже код предназначен для подписки и получения сообщения

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

Браузер просто продолжает загружаться и не останавливается.Я пытался изучить код вендоров, но ответ не понятен.

Мой ENV, запрошенный пакетом

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]

Пожалуйста, дайте мне знать, если кто-то смог настроить их оба в laravel.

1 Ответ

0 голосов
/ 17 декабря 2018

вызов метода 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...