我一直在使用 Redis's Pub/Sub在我的应用程序中有一点,到目前为止它一直很棒。我能够从 Laravel 发送一个 Publish 到另一个能够订阅的后端进程,并最终将一个事件发布回 Laravel。
用户的用例如下:
提交表格 -> 等待回复(几分钟) -> 继续交易
在后端:
表单发布到路由,然后发布到 Controller , Controller 将此发布到订阅的第 3 方( channel 一),最终该第 3 方发布回来( channel 二)
主要问题:我不知道订阅(第二 channel )和处理在那里发布的内容的合适位置。
理想情况下,我能够以两种方式处理发布请求:
让用户知道他们的表单已被处理,他们可以进入下一步(可能更新 Vue 组件的属性)
将发布的信息存储到我的数据库中。
在文档中,他们将它放在一个命令中,如果我在这里尝试使用它,它看起来像这样:
public function handle()
{
Redis::subscribe('channel-two', function ($message) {
// update the client so that the user moves on
// send $message contents to the database
});
}
但这对我来说似乎并不理想,因为我希望这个 channel 订阅 24/7,始终收听。即使它在命令中,我仍然很清楚如何最好地更新客户端。
我应该在我的 Laravel 项目中的哪个位置订阅?是否有应对这些事件的最佳做法?
最佳答案
Redis::subscribe
用于类似示例中的命令,用于连续收听给定 channel 。
来自文档:
First, let's setup a channel listener using the subscribe method. We'll place this method call within an Artisan command since calling the subscribe method begins a long-running process:
您需要使用进程管理器(例如 supervisor 或 pm2)来运行该命令,这与文档中描述的运行 queue listeners 非常相似。 .
关于laravel - 在 Laravel 中哪里可以订阅 Redis Pub/Sub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997104/