Как мне использовать kafka и redis в проекте laravel?

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

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

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

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

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

Пакет, который я использую в Laravel для 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
});

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

Мой 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.

0

Решение

вызов метода subscribe () является блокирующим, что означает, что скрипт никогда не завершится, поэтому причина, по которой ваш браузер никогда не прекращает загрузку.

Скрипт PHP, где у вас есть вызов метода subscribe (), должен запускаться из 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector