QUEUES
Ola prof!
Estou a ter problemas com processamento de filas, utilizando o redis. Será que há algum tratamento especial quando se trabalha com filas em várias instâncias?
Olá, Gerson!
Tudo bem?
Está jogando as filas para o redis, mas está usando um serviço separado, certo?
--
Use um serviço da nuvem para gerenciar o banco redis, ou, jogue as filas para o database mesmo, possivelmente vai te atender.
Está jogando as filas para o redis, mas está usando um serviço separado, certo?
SIM, REDIS EM TODAS INSTÂNCIAS...
Não, precisa ser um serviço centralizado, porque a cada request direferente o load balancer vai enviar um server diferente, as instâncias não pode armazenar estado.
TENTEI:
php artisan queue:table
php artisan migrate
QUEUE_CONNECTION=database
E UMA VEZ QUE ESTOU A PROCESSAR FILAS EM LARAVEL EXCEL,
E NÃO DEU CERTO, RETORNOU: File "/var/www/storage/framework/cache/laravel-excel/laravel-excel-51nBwwbRvdPWwuj2ZLzHP2Rgvujb6bHV" does not exist
NOTA: LOCALMENTE FUNCIONA PERFEITAMENTE...
COM rabbitmq NÃO SEI SE FIZ ALGO ERRADO, TAMBÉM NÃO DEU CERTO, FICOU PROCESSANDO QUEUES EM CADA INSTÂNCIA QUE TENHO...
Fica calmo que vou te ajudar.
--
O ponto é: instâncias não pode armazenar estado
Quando você tem 3 instâncias, cada uma com o seu redis (estado), vai ter problemas, porque pensa comigo, armazenou algo no redis da instância 01, ao acessar novamente cai na instância 02, mas, os dados estão na instância 01.. aqui está o seu problema.
Ahhh mas localmente funciona perfeitamente!
Localmente você tem uma única aplicação, em produção você tem N aplicações.
--
No seu caso, ainda tem mais um problema, vi que está armazenando arquivos.. aí piora ainda mais a situação, use AWS S3 ou Google Cloud Storage:
https://academy.especializati.com.br/aula/usar-a-amazon-s3-com-laravel
https://academy.especializati.com.br/aula/usar-a-google-cloud-storage-com-laravel
Segui este exemplo https://academy.especializati.com.br/aula/usar-a-google-cloud-storage-com-laravel e apliquei no projeto.
Mas não deu certo, retornou este erro: File "/var/www/storage/framework/cache/laravel-excel/laravel-excel-jCgU1VNgbOOconAmwNLqW1Y4cDWqWLNG" does not exist.
Meu .ENV:
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=gcs
QUEUE_CONNECTION=database
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
A parte de armazenamento de files seguindo este exemplo https://academy.especializati.com.br/aula/usar-a-google-cloud-storage-com-laravel funcionou com sucesso... Consigo fazer upload e visualizar...
Este erro: File "/var/www/storage/framework/cache/laravel-excel/laravel-excel-jCgU1VNgbOOconAmwNLqW1Y ocorre quando tento fazer cadastro de itens na base de dados atraves de um excell => "https://docs.laravel-excel.com/3.1/imports/queued.html" aplicando ShouldQueue...
Vou tentar isto:
BROADCAST_DRIVER=log
CACHE_DRIVER=database
FILESYSTEM_DISK=gcs
QUEUE_CONNECTION=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
Depois darei feedback!
Está armazenando o cache em file, está errado, está armazenando estado: CACHE_DRIVER=file
ALGO ESTRANHO!
MEU .ENV:
BROADCAST_DRIVER=log
CACHE_DRIVER=database
FILESYSTEM_DISK=gcs
QUEUE_CONNECTION=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
MAS RETOURNOU ESTE ERRO: File "/var/www/storage/framework/cache/laravel-excel/laravel-excel-hJK1VIpQHPfFQemyUCq14Pi6Uty7tXIj" does not exist.
ACESSEI "storage/framework/cache/" EM UMA DAS INSTÂNCIAS E, REALMENTE LÁ ENCONTREI "laravel-excel/laravel-excel-hJK1VIpQHPfFQemyUCq14Pi6Uty7tXIj".
OU SEJA, O LARAVEL ESTÁ A IGNORAR ESTA CONFIGURAÇÃO: CACHE_DRIVER=database
TENTEI php artisan optimize:clear E NADA DE SUCESSO...
EM UMA DAS INSTÂNCIAS E, REALMENTE LÁ ENCONTREI
-> Apenas em uma, para não dar o erro, deveria ter em todas.. ou seja, está armazenando estado, está errado. Não deveria ter arquivos em nenhuma!
--
Sua aplicação não é uma API, certo?
O mais recomendado é um serviço da GCP para gerenciar o cache.
--
Para cache, o Laravel suporta:
Memcached, Redis, DynamoDB, file (que não funciona para vc), array, e database
--
Como está usando Database, chegou a criar essa tabela?
https://laravel.com/docs/10.x/cache#prerequisites-database
Outro ponto importante, atualizou em todas as instâncias o valor da variável de ambiente, para CACHE_DRIVER=database (provavelmente não, e está aqui a sua dor de cabeça).
Sua aplicação não é uma API, certo? SIM
Como está usando Database, chegou a criar essa tabela? php artisan cache:table => php artisan migrate
Outro ponto importante, atualizou em todas as instâncias o valor da variável de ambiente, para CACHE_DRIVER=database (provavelmente não, e está aqui a sua dor de cabeça). SIM, TODAS INSTÂNCIAS ESTÃO EM CACHE_DRIVER=database
O mais recomendado é um serviço da GCP para gerenciar o cache. COMO SE CHAMA O NOME DO SERVIÇO?
CORRECÇÃO:
Sua aplicação não é uma API, certo? É UMA API
Certeza que todas as instâncias estão com o CACHE_DRIVE=database?
Consegue acessar uma a uma e verificar (pode ser via http mesmo -> http://ip-instance01)
TODAS ESTÃO ASSIM:
BROADCAST_DRIVER=pusher
CACHE_DRIVER=database
FILESYSTEM_DISK=gcs
QUEUE_CONNECTION=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
O PROBLEMA DEVE ESTAR AQUI (config/excel.php), PORQUE É ESTE PACOTE QUE ESTA A DAR STRESS:
...
'cache' => [
/*
|--------------------------------------------------------------------------
| Default cell caching driver
|--------------------------------------------------------------------------
|
| By default PhpSpreadsheet keeps all cell values in memory, however when
| dealing with large files, this might result into memory issues. If you
| want to mitigate that, you can configure a cell caching driver here.
| When using the illuminate driver, it will store each value in the
| cache store. This can slow down the process, because it needs to
| store each value. You can use the "batch" store if you want to
| only persist to the store when the memory limit is reached.
|
| Drivers: memory|illuminate|batch
|
*/
'driver' => 'memory',
/*
|--------------------------------------------------------------------------
| Batch memory caching
|--------------------------------------------------------------------------
|
| When dealing with the "batch" caching driver, it will only
| persist to the store when the memory limit is reached.
| Here you can tweak the memory limit to your liking.
|
*/
'batch' => [
'memory_limit' => 60000,
],
/*
|--------------------------------------------------------------------------
| Illuminate cache
|--------------------------------------------------------------------------
|
| When using the "illuminate" caching driver, it will automatically use
| your default cache store. However if you prefer to have the cell
| cache on a separate store, you can configure the store name here.
| You can use any store defined in your cache config. When leaving
| at "null" it will use the default store.
|
*/
'illuminate' => [
'store' => null,
],
],
/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'transactions' => [
'handler' => 'db',
'db' => [
'connection' => null,
],
],
'temporary_files' => [
/*
|--------------------------------------------------------------------------
| Local Temporary Path
|--------------------------------------------------------------------------
|
| When exporting and importing files, we use a temporary file, before
| storing reading or downloading. Here you can customize that path.
|
*/
'local_path' => storage_path('framework/cache/laravel-excel'),
...
Sim, o problema é neste arquivo mesmo, ele está armazenando estado. Consegue compartilhar esse arquivo comigo, full? Coloca no gist mesmo;
https://gist.github.com/gchiule/ba74cc13fb425d177e279b3826c0095f
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!