ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – Laravel.两个项目的公共队列

2019-07-24 18:30:44  阅读:376  来源: 互联网

标签:php laravel laravel-5-2


我有两个不同的项目.
Laravel项目A和Laravel项目B.
我需要从项目A创建任务到项目B到队列.
而且我不想在项目A中为此创建Job.

目前我的意识是:

项目A.

有状态但没有业务逻辑的工作:

<?php

namespace App\Jobs;

use ...;

/**
 * Fake class!!!
 */
class MyJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    public $queue = 'MyQueue';

    /**
     * Some state
     */
    protected $_contentId;

    public function __construct($contentId)
    {
        $this->_contentId = $contentId;
    }

    /**
     * Excess. I dont need business logic in project A.
     */
    public function handle()
    {
    }
}

我在项目A中将工作推入队列:

    ...
    $this->dispatch(
        new MyJob($this->_contentId)
    );
    ...

项目B.

<?php

namespace App\Jobs;

use ...;

/**
 * Really needed class
 */
class MyJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    public $queue = 'MyQueue';

    /**
     * Some state
     */
    protected $_contentId;

    public function __construct($contentId)
    {
        $this->_contentId = $contentId;
    }

    /**
     * Here is my business logic. In Project B!
     */
    public function handle()
    {
        Artisan::call('my_command', [
            'id' => $this->_contentId,
        ]);
    }
}

那么,在项目A中如何不使用MyJob?

解决方法:

如果您将两个laravels应用程序连接到同一个队列服务器.您可以将作业放在其他站点队列中.例如,如果你在Laravel A

$job = (new Job())->onQueue('theQueueForLaravelB')
dispatch($job);

但是要完成这个,你应该做一个基本的工作,用参数数据来分配一个新工作.喜欢:

class DispatchNewJob implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    private $class_to_create;
    private $data;

    public function __construct($class_to_create, $data)
    {
        $this->class_to_create = $class_to_create;
        $this->data = $data;
    }

    public function handle()
    {
        dispatch(new $this->$class_to_create($this->data));
    }
}

因此,您现在可以使用任何数据从laravel A发送任务到laravel B.

你可以打电话

$job = (new DispatchNewJob('App\Jobs\JobInLaravelB', ['data'=>'myawesomedata'])
               ->onQueue('LaravelBQueue');
dispatch($job);

对不起我的英语,我来自阿根廷.

标签:php,laravel,laravel-5-2
来源: https://codeday.me/bug/20190724/1525096.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有