如何在Laravel 5中使用redis为多租户多数据库架构应用程序执行排队和缓存?

Roh*_*han 14 php queue redis laravel laravel-5

我正在使用Laravel开发一个多租户多数据库架构应用程序,这基本上意味着应用程序中的每个租户都有自己的数据库,自己的用户集,资源等等.

现在我正在尝试在应用程序中实现队列和缓存,然后我尝试使用redis.示例代码如下所示:

$mailer->send('emails.welcome', ['user' => $user], function ($message) use ($user) {
    $message->from("admin@admin.com", "Admin");
    $message->to($user->email, $user->first_name)->subject("Welcome!");
});
Run Code Online (Sandbox Code Playgroud)

这是向用户注册发送欢迎电子邮件.但是排队将所有队列存储在同一个Redis实例中的同一个数据库中,据我所知,不同的租户电子邮件会混淆.

如何挂钩到Laravel 5并更改队列行为,以将每个租户的作业存储在单独的数据库中,或者存储有关特定作业所属租户的额外元信息?然后,在继续工作之前,我还将如何告诉Laravel解析额外的元信息并连接到正确的租户数据库?

Vas*_*yak 1

为了队列系统的适当工作,您需要\Illuminate\Queue\SerializesModels在作业中使用您自己的特征实现。Job::__sleep()Wheech 将在和上保存并初始化正确的数据库连接Job::__wakeup()。看一下hyn/multi-tenant包的TenantAwareJob 特征

为了使缓存系统正常工作,您需要使用取决于当前主机的前缀。看看Hyn/多租户开发人员建议如何实现这一点。