将作业从同一服务器上的另一个Laravel示例推送到Laravel Redis队列中?

rdlzhqv9  于 2023-01-01  发布在  Redis
关注(0)|答案(2)|浏览(127)

我有两个Laravel项目在同一个服务器上运行。
第一个通过HTTP调用第二个的API,第二个推送一个作业来通知一些用户。
由于两个项目都在同一台服务器上,我不能让第一个项目将作业推送到第二个项目的redis作业队列中吗?

r3i60tvu

r3i60tvu1#

我从未尝试过这种方法,但应该可以
您没有指定您的项目使用什么队列连接,但是让我们假设它们使用2个不同的连接,例如2个不同的redis服务器
在您的第一个laravel项目config/queue.php中,向connections添加新连接,该连接将指向第二个laravel项目的队列连接。
然后,您可以使用调度到特定连接

ExampleJob::dispatch($data)->onConnection('project-2-connection');

务必确保两个项目中存在相同的作业类ExampleJob
为了使您的工作更轻松,您应该将$data作为简单数组传递,避免使用SerializesModels。如果您从项目1传递的模型在项目2中不存在,则您的作业将失败,并返回ModelNotFoundException。您可以使用模型,但需要在两个项目中使用相同的模型

k3fezbri

k3fezbri2#

设置一个队列管理服务器,它可以从多个服务器接收作业或将作业指向队列。下面是一个简单的代码,可能会有所帮助;

namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Jobs\ProcessPodcast;
use App\Models\Podcast;
use Illuminate\Http\Request;
 
class PodcastController extends Controller
{
    /**
     * Store a new podcast.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $podcast = Podcast::create(/* ... */);
 
        // Create podcast...
 
        ProcessPodcast::dispatch($podcast)->onQueue('processing');
    }
}

相关问题