English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Laravel SQS Extended
Introdução
Laravel SQS Extended é um driver de fila do Laravel projetado para contornar os limites de tamanho de payload do AWS SQS. Este driver de fila irá automaticamente serializar grandes payloads para um disco (geralmente S3) e, em seguida, deserializá-los em tempo de execução. Este pacote se inspirou em https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-s3-messages.html.
Migração do Cliente Simples SQS Extended
- Remova o pacote
simplesoftwareio/simple-sqs-extended-clientdo seu projeto. - Instale o pacote
defectivecode/laravel-sqs-extended.
A antiga configuração é compatível com a nova versão do pacote. A única alteração é o nome do pacote.
Instalação
- Primeiro, crie um bucket que irá armazenar todos os seus grandes payloads SQS.
Recomendamos fortemente que você use um bucket privado ao armazenar payloads SQS. Payloads podem conter informações sensíveis e nunca devem ser compartilhados publicamente.
-
Execute
composer require defectivecode/laravel-sqs-extendedpara instalar o driver de fila. -
Em seguida, adicione as seguintes configurações de fila padrão ao seu arquivo
queue.php.
Os usuários do Laravel Vapor devem definir o nome da conexão como
sqs. A conexãosqsé procurada dentro do Vapor Core e esta biblioteca não funcionará como esperado se você usar um nome de conexão diferente.
/*|--------------------------------------------------------------------------| Configuração da Fila SQS Disk|--------------------------------------------------------------------------|| Aqui você pode configurar o driver de fila SQS disk. Ele compartilha todas as mesmas| opções de configuração do driver de fila SQS nativo do Laravel. A única opção adicional| é `disk_options`, que é explicada abaixo.|| always_store: Determina se todos os payloads devem ser armazenados em um disco, independentemente do limite de tamanho da fila.| cleanup: Determina se os arquivos de payload devem ser removidos do disco uma vez que o trabalho é processado. Manter os| arquivos pode ser útil para reexecutar os trabalhos da fila mais tarde por razões de depuração.| disk: O disco para salvar os payloads SQS. Este disco deve ser configurado no seu arquivo de configuração filesystems.php do Laravel.| max_size: Opcional. Define o limite de descarregamento para um número fixo de bytes. Quando omitido, o limite é lido a partir| da própria fila. Veja "Limite de tamanho do payload" abaixo.| prefix O prefixo (pasta) para armazenar os payloads. Isso é útil se você estiver compartilhando um disco com outras filas SQS.| Usar um prefixo permite que o comando queue:clear destrua os arquivos separadamente de outras filas apoiadas por disco sqs| que compartilham o mesmo disco.|*/'sqs' => [ 'driver' => 'sqs-disk', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/seu-id-de-conta'), 'queue' => env('SQS_QUEUE', 'default'), 'suffix' => env('SQS_SUFFIX'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'after_commit' => false, 'disk_options' => [ 'always_store' => false, 'cleanup' => false, 'disk' => env('SQS_DISK'), 'prefix' => 'prefix-do-bucket', ],],
- Inicie suas filas e lucre sem se preocupar com o limite de payload do SQS 🥳
Limite de tamanho do payload
A AWS aumentou o payload máximo do SQS de 256 KiB para 1 MiB em agosto de 2025, mas MaximumMessageSize é um atributo por fila — filas criadas antes dessa mudança mantêm o antigo valor de 262144 bytes até que você o aumente. Em vez de assumir qualquer limite, este pacote lê o atributo da fila e descarrega apenas o que realmente não cabe.
O limite é resolvido na seguinte ordem, e a primeira correspondência ganha. Um payload é armazenado no disco quando seu comprimento é maior ou igual ao limite resolvido.
| Condição | Limite | Lê o atributo da fila |
|---|---|---|
always_store é true |
Todo payload é armazenado | Não |
max_size está definido |
O valor configurado | Não |
A fila relata 262144 (o padrão anterior a 2025) |
250000 | Sim |
A fila relata 1048576 (aumentado para o máximo) |
1036432 | Sim |
| O atributo não pode ser lido | 250000 | Tentado uma vez |
A margem reservada de 12144 bytes cobre a sobrecarga por mensagem e é dimensionada para que uma fila deixada no padrão de 262144 bytes resolva para o limite de 250000 bytes usado por versões anteriores deste pacote. A atualização não altera o comportamento até que você aumente o próprio limite da fila.
Permissões
Ler o atributo requer sqs:GetQueueAttributes. O resultado é armazenado em cache na memória por fila, então isso custa uma chamada por fila durante a vida útil do processo em vez de uma chamada por trabalho.
Se o atributo não puder ser lido — uma política IAM restrita, ou um emulador SQS que não o implementa — o driver recua para o limite de 250000 bytes e continua a despachar. Defina max_size para ignorar a busca completamente se você preferir não conceder a permissão.
Aumentando o limite de uma fila
aws sqs set-queue-attributes \ --queue-url https://sqs.us-east-1.amazonaws.com/seu-id-de-conta/sua-fila \ --attributes MaximumMessageSize=1048576
Observe que o SQS mede o uso em blocos de 64 KB, então uma única mensagem de 1 MiB é contabilizada como 16 solicitações. Armazenar grandes payloads em um disco é frequentemente ainda o caminho mais barato.
Diretrizes de Suporte
Obrigado por escolher nosso pacote de código aberto! Por favor, reserve um momento para conferir estas diretrizes de suporte. Elas ajudarão você a aproveitar ao máximo nosso projeto.
Suporte Direcionado pela Comunidade
Nosso projeto de código aberto é alimentado por nossa incrível comunidade. Se você tiver dúvidas ou precisar de assistência, StackOverflow e outros recursos online são suas melhores opções.
Erros e Priorização de Recursos
A realidade de gerenciar um projeto de código aberto significa que não podemos abordar imediatamente todos os erros ou solicitações de recursos relatados. Priorizamos as questões na seguinte ordem:
1. Erros que Afetam Nossos Produtos Pagos
Erros que impactam nossos produtos pagos serão sempre nossa maior prioridade. Em alguns casos, podemos abordar apenas erros que nos afetam diretamente.
2. Pull Requests da Comunidade
Se você identificou um erro e tem uma solução, por favor, envie um pull request. Após as questões que afetam nossos produtos, damos a próxima maior prioridade a essas correções impulsionadas pela comunidade. Uma vez revisada e aprovada, iremos mesclar sua solução e creditar sua contribuição.
3. Apoio Financeiro
Para questões fora das categorias mencionadas, você pode optar por financiar sua resolução. Cada problema em aberto está vinculado a um formulário de pedido onde você pode contribuir financeiramente. Priorizamos essas questões com base no valor do financiamento fornecido.
Contribuições da Comunidade
O código aberto prospera quando sua comunidade é ativa. Mesmo que você não esteja corrigindo erros, considere contribuir com melhorias de código, atualizações de documentação, tutoriais ou ajudando outros em canais da comunidade. Incentivamos fortemente todos, como comunidade, a ajudar a apoiar o trabalho de código aberto.
Para reiterar, a DefectiveCode priorizará erros com base em como eles impactam nossos produtos pagos, pull requests da comunidade e o apoio financeiro recebido para as questões.
Licença - Licença MIT
Copyright © Defective Code, LLC. Todos os direitos reservados
A permissão é concedida, sem qualquer custo, a qualquer pessoa que obter uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e para permitir que pessoas a quem o Software é fornecido façam o mesmo, sujeito às seguintes condições:
O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou porções substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO A GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO INFRAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DO DIREITO AUTORAL SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, DELITO OU DE OUTRA FORMA, DECORRENTES DE, EM DECORRÊNCIA OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.