[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

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?

Manager Carlos Ferreira 31/05/2023

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.

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

Está jogando as filas para o redis, mas está usando um serviço separado, certo?

SIM, REDIS EM TODAS INSTÂNCIAS...

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

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.

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

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...

 

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

COM rabbitmq NÃO SEI SE FIZ ALGO ERRADO, TAMBÉM NÃO DEU CERTO, FICOU PROCESSANDO QUEUES EM CADA INSTÂNCIA QUE TENHO...

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

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

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

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

 

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

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...

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

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...

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

Vou tentar isto:

BROADCAST_DRIVER=log

CACHE_DRIVER=database

FILESYSTEM_DISK=gcs

QUEUE_CONNECTION=database

SESSION_DRIVER=database

SESSION_LIFETIME=120

 

Depois darei feedback!

 

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

Está armazenando o cache em file, está errado, está armazenando estado: CACHE_DRIVER=file

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

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...

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

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).

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

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?

 

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

CORRECÇÃO:

Sua aplicação não é uma API, certo? É UMA API

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

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)

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

TODAS ESTÃO ASSIM:

BROADCAST_DRIVER=pusher

CACHE_DRIVER=database

FILESYSTEM_DISK=gcs

QUEUE_CONNECTION=database

SESSION_DRIVER=database

SESSION_LIFETIME=120

Gerson Hugo Samuel Chiule
Criador Gerson Hugo Samuel Chiule 31/05/2023

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'),

 

...

Gerson Hugo Samuel Chiule
Manager Carlos Ferreira 31/05/2023

Sim, o problema é neste arquivo mesmo, ele está armazenando estado. Consegue compartilhar esse arquivo comigo, full? Coloca no gist mesmo;

Carlos Ferreira
Criador Gerson Hugo Samuel Chiule 31/05/2023

https://gist.github.com/gchiule/ba74cc13fb425d177e279b3826c0095f

Gerson Hugo Samuel Chiule
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!