[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Luciano Bortoloti Ferenczuk
Criador Luciano Bortoloti Ferenczuk 02/04/2020

Fiz o Curso Laravel Multi Tenant Multi Database, ficou show de bola minha aplicação, mas não consegui resolver a questão dos comandos Schedule:run e também a questão das Queue:work no supervisor, alguém pode me ajudar?

Manager Carlos Ferreira 02/04/2020

Olá, Luciano!
Tudo bem?

Parabéns pela disciplina amigo.

Para as filas você pode usar o SQS da Amazon (é ótimo e gratuito para rodar até 1M de filas, é fila pkct).

Ou, também pode rodar em memória com o redis. É importante não trabalhar com database, porque nesse seria necessário muitas configurações e rodar as filas por tenant.

Agora sobre Task Scheduling, você pode setar a conexão direto no model, e salvar os dados no banco principal.

Pegou a ideia amigo?

Carlos Ferreira
Criador Luciano Bortoloti Ferenczuk 02/04/2020

Obrigado, eu já ia usar Redis, eu ia usar um container só para rodar as filas, dessa forma vou conseguir rodar tudo?

 sobre Task Scheduling, o que eu entendi é que o sistema principal que vai executar tudo, no caso de notificações ele vai acessar banco por banco e notificar cada cliente, é isso?

tem como postar algum exemplo?

 

Desde já agradeço o suporte, e aguardo ancioso o novo curso  Laravel para Senior

Luciano Bortoloti Ferenczuk
Manager Carlos Ferreira 02/04/2020

Olá, Luciano!

Sim, pode subir um container para o redis.

O que pretende fazer exatamente com Task Scheduling?
Porque se precisa rodar tasks especificas para cada tenant precisa definir nas tabelas dos tenants, e rodar de forma personalizada (igual fizemos com os migrations) para mudar a conexão antes.

Carlos Ferreira
Criador Luciano Bortoloti Ferenczuk 02/04/2020

Bom dia, 

cadastrei o aws sqs para testar, ele está enviando as queues para o sqs mas não está executando, acho que estou errando no arquivo no job, pois quando eu seto o QUEUE_CONNECTION=sync , ele funciona perfeitamanete, ele cria um departamento em cada tenant.

 

Eu criei um arquivo Job para testes, veja:

<?php

namespace App\Jobs\Tenant;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use Storage ;
use App\Models\Tenant\Departament;
use App\Models\Tenant;
use App\Tenant\ManagerTenant;




class TesteJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

 

/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}

/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$ManagerTenant = new ManagerTenant();

$tenants = Tenant::all();

foreach ($tenants as $tenant) {

$ManagerTenant->setConnection($tenant);

$this->departaments($tenant->username);

}
 

 

}



 





public function departaments($tenant)
{
$data = [
 
'name'=>$tenant .'-' . date('H-i-s'),
'group' => 'geral',
 

];


Departament::create($data);
 
 
}








}

 

 

Luciano Bortoloti Ferenczuk
Manager Carlos Ferreira 02/04/2020

Olá, Luciano!

Se processou com o modo sync o job está certo.

No painel da Amazon, tem algum registro de erro?

E nos logs da sua aplicação?

Carlos Ferreira
Criador Luciano Bortoloti Ferenczuk 02/04/2020

Nenhum erro, nem na AWS mas no terminal retornou os erros abaixo.

 

Eu percebei, que se eu abrir o terminal e digitar php artisan schedule:run e na sequencia  php artisan queue:work ele funciona perfeitamente, mas se eu deixar o cron rodar sozinho, ele envia a job para a AWS SQS, mas não processa dando erro

[2020-04-07 12:41:03][5e35ed1f-30a5-48cc-975a-4a8485341b18] Failed:     App\Jobs\Tenant\TesteJob,

percebi também que lá na AWS SQS não tem alguma referencia em qual bando deve ser executado, talvez ele está tentando executar no banco principal

 

segue os dados do terminal

 

root@803c31dac25d:/var/www# php artisan schedule:run

    Running scheduled command: Closure

Running scheduled command: App\Jobs\Tenant\TesteJob

root@803c31dac25d:/var/www# php artisan queue:work

    [2020-04-07 12:40:16][8ce2a568-b532-4c58-89e4-e35dbbb79a6e] Processing: App\Jobs\Tenant\TesteJob

[2020-04-07 12:40:17][8ce2a568-b532-4c58-89e4-e35dbbb79a6e] Processed:  App\Jobs\Tenant\TesteJob 

[2020-04-07 12:41:02][5e35ed1f-30a5-48cc-975a-4a8485341b18] Processing: App\Jobs\Tenant\TesteJob

[2020-04-07 12:41:03][5e35ed1f-30a5-48cc-975a-4a8485341b18] Failed:     App\Jobs\Tenant\TesteJob

[2020-04-07 12:42:05][9edf2372-69da-438c-957d-b2d794a2d361] Processing: App\Jobs\Tenant\TesteJob

[2020-04-07 12:42:05][9edf2372-69da-438c-957d-b2d794a2d361] Failed:     App\Jobs\Tenant\TesteJob

[2020-04-07 12:43:04][25373183-06ce-456d-94cb-72058e23eb0c] Processing: App\Jobs\Tenant\TesteJob

[2020-04-07 12:43:05][25373183-06ce-456d-94cb-72058e23eb0c] Failed:     App\Jobs\Tenant\TesteJob

 

Luciano Bortoloti Ferenczuk
Manager Carlos Ferreira 02/04/2020

Precisa conferir nos logs da sua aplicação qual é o erro retornado (em storage/logs/)

Por default o comando vai conectar a base principal... se quiser que rode conectado na base dos clientes é algo mais complexo, nesse caso talvez seria mais interessante centralizar tudo em um único local (banco principal), ou talvez até rodar as filas por tenant.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!