Не получает сообщение при публикации с использованием Redis в laravel API - PullRequest
0 голосов
/ 09 марта 2020

Я использую laravel API в качестве бэкэнда и vue в качестве внешнего интерфейса. Это отдельные проекты. Когда я нажимаю API, которое публикуется после подключения Redis, как

$redis = Redis::connection();

$redis->publish('new_message_sent',json_encode($request->all()));

Это ничего не делает. Фактически, когда я нажимаю на API (используя почтальон) и возвращаю объект $ redis, он возвращает мне пустой объект.

Вот код узла сервера для подписки

io.on("connection", function(socket) {
   console.log("Client Connecteddddd");
   var redisClient = redis.createClient();
   redisClient.subscribe("new_message_sent");


   redisClient.on("new_message_sent", function(channel, message) {
       message = JSON.parse(message);
       console.log(message);    
   });

   redisClient.on("disconnect", function() {
       redisClient.quit();
   });
});

1 Ответ

0 голосов
/ 09 марта 2020

Как выглядит код вашей подписки?

Получающий конец для pub / sub с Redis должен выглядеть примерно так:

  Redis::subscribe(['your-channel'], function ($message) {
            echo $message;
        });

Это будет длительный процесс. Это будет запускать и отображать все, что опубликовано на вашем канале, пока что-то не прервет его.

Если вы стремитесь получить информацию в браузер для конечного пользователя, вам потребуется дополнительный шаг, например, веб-розетка.

Характер pub / sub означает, что он никогда не узнает о сообщениях, отправленных до того, как будет работать подписка (), только о тех, которые происходят во время его работы.

Для публикации не следует сначала нужно разрешить соединение.

Redis::publish('new_message_sent', json_encode($request->all()));

https://laravel.com/docs/master/redis

...