English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Laravel SQS Extended
Введение
Laravel SQS Extended — это драйвер очереди Laravel, который был разработан для обхода ограничений по размеру полезной нагрузки AWS SQS. Этот драйвер очереди автоматически сериализует большие полезные нагрузки на диск (обычно S3), а затем десериализует их во время выполнения. Этот пакет был вдохновлён информацией из https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-s3-messages.html.
Миграция с Simple SQS Extended Client
- Удалите пакет
simplesoftwareio/simple-sqs-extended-clientиз вашего проекта. - Установите пакет
defectivecode/laravel-sqs-extended.
Старая конфигурация обратно совместима с новым пакетом. Единственное изменение — это имя пакета.
Установка
- Сначала создайте бакет, который будет хранить все ваши большие полезные нагрузки SQS.
Мы настоятельно рекомендуем использовать приватный бакет для хранения полезных нагрузок SQS. Полезные нагрузки могут содержать конфиденциальную информацию и никогда не должны быть общедоступными.
-
Выполните команду
composer require defectivecode/laravel-sqs-extendedдля установки драйвера очереди. -
Затем добавьте следующие настройки по умолчанию для очереди в ваш файл
queue.php.
Пользователи Laravel Vapor должны установить имя соединения как
sqs. Соединениеsqsищется в Vapor Core, и эта библиотека не будет работать должным образом, если вы используете другое имя соединения.
/*|--------------------------------------------------------------------------| Конфигурация очереди SQS Disk|--------------------------------------------------------------------------|| Здесь вы можете настроить драйвер очереди SQS disk. Он поддерживает все те же| параметры конфигурации, что и встроенный драйвер очереди Laravel SQS. Единственный добавленный| параметр — это `disk_options`, который объяснен ниже.|| always_store: Определяет, должны ли все полезные нагрузки храниться на диске независимо от ограничения размера очереди.| cleanup: Определяет, должны ли файлы полезных нагрузок быть удалены с диска после обработки задания. Оставление| файлов может быть полезно для повторного воспроизведения заданий очереди позже для отладки.| disk: Диск для сохранения полезных нагрузок SQS. Этот диск должен быть настроен в вашем конфигурационном файле Laravel filesystems.php.| max_size: Дополнительно. Фиксирует порог выгрузки на фиксированное количество байт. Если не указано, порог считывается из| самой очереди. См. "Порог размера полезной нагрузки" ниже.| prefix Префикс (папка), чтобы хранить полезные нагрузки. Это полезно, если вы делите диск с другими очередями SQS.| Использование префикса позволяет команде queue:clear удалять файлы отдельно от других очередей с диском sqs,| которые используют тот же диск.|*/'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/your-account-id'), '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' => 'bucket-prefix', ],],
- Запустите ваши очереди и наслаждайтесь, не беспокоясь об ограничении полезной нагрузки SQS 🥳
Порог размера полезной нагрузки
AWS увеличил максимальную полезную нагрузку SQS с 256 KiB до 1 MiB в августе 2025 года, но MaximumMessageSize является атрибутом для каждой очереди — очереди, созданные до этого изменения, сохраняют старое значение 262144 байт, пока вы его не повысите. Вместо предположений о каком-либо из ограничений этот пакет читает атрибут из очереди и выгружает только то, что действительно не вмещается.
Порог определяется в следующем порядке, и первое соответствие выигрывает. Полезная нагрузка сохраняется на диске, когда ее длина больше или равна разрешенному порогу.
| Условие | Порог | Читает атрибут очереди |
|---|---|---|
always_store равно true |
Каждая полезная нагрузка сохраняется | Нет |
max_size установлен |
Конфигурируемое значение | Нет |
Очередь сообщает 262144 (предельное значение до 2025 года) |
250000 | Да |
Очередь сообщает 1048576 (повышено до максимума) |
1036432 | Да |
| Атрибут не может быть прочитан | 250000 | Попытка один раз |
Резервируемая свобода в 12144 байта покрывает накладные расходы на каждое сообщение и размером так, что очередь, оставленная на предельном значении 262144 байт, соответствует порогу в 250000 байт, используемому более старыми версиями этого пакета. Обновление не меняет поведение, пока вы не повысите собственный лимит очереди.
Разрешения
Чтение атрибута требует sqs:GetQueueAttributes. Результат кешируется в памяти для каждой очереди, поэтому это стоит одного вызова для очереди на время работы процесса, а не одного вызова для задания.
Если атрибут не может быть прочитан — узкая политика IAM или эмулятор SQS, который не реализует это — драйвер возвращается к порогу 250000 байт и продолжает выполнение. Установите max_size, чтобы полностью пропустить поиск, если вы не хотите предоставлять разрешение.
Повышение лимита очереди
aws sqs set-queue-attributes \ --queue-url https://sqs.us-east-1.amazonaws.com/your-account-id/your-queue \ --attributes MaximumMessageSize=1048576
Обратите внимание, что SQS измеряет использование в 64 КБ блоках, поэтому одно сообщение объемом 1 MiB будет взимать оплату как 16 запросов. Хранение больших полезных нагрузок на диске зачастую остается более дешевым вариантом.
Руководство по поддержке
Спасибо, что выбрали наш пакет с открытым исходным кодом! Пожалуйста, уделите немного времени, чтобы ознакомиться с этими рекомендациями по поддержке. Они помогут вам максимально эффективно использовать наш проект.
Поддержка, основанная на сообществе
Наш проект с открытым исходным кодом поддерживается нашим замечательным сообществом. Если у вас есть вопросы или требуется помощь, StackOverflow и другие онлайн-ресурсы — ваши лучшие помощники.
Ошибки и приоритизация функций
Реальность управления проектом с открытым исходным кодом заключается в том, что мы не можем сразу же решить каждую сообщенную ошибку или запрос на новую функцию. Мы приоритизируем проблемы в следующем порядке:
1. Ошибки, влияющие на наши платные продукты
Ошибки, которые затрагивают наши платные продукты, всегда будут нашим приоритетом. В некоторых случаях мы можем рассматривать только те ошибки, которые влияют на нас напрямую.
2. Запросы на внесение изменений от сообщества
Если вы выявили ошибку и у вас есть решение, пожалуйста, отправьте запрос на внесение изменений. После вопросов, касающихся наших продуктов, мы придаем следующий высокий приоритет этим исправлениям, инициированным сообществом. После проверки и одобрения мы объединим ваше решение и отметим ваш вклад.
3. Финансовая поддержка
Для вопросов за пределами упомянутых категорий вы можете выбрать финансирование их решения. Каждая открытая проблема связана с формой заказа, через которую вы можете внести финансовый вклад. Мы приоритизируем эти вопросы на основе суммы финансирования.
Вклад сообщества
Проекты с открытым исходным кодом процветают, когда их сообщество активно. Даже если вы не исправляете ошибки, подумайте о том, чтобы внести вклад через улучшение кода, обновление документации, создание учебных пособий или помощь другим в каналах сообщества. Мы настоятельно призываем всех, как сообщество, поддерживать работу с открытым исходным кодом.
Повторим, что DefectiveCode будет приоритизировать ошибки в зависимости от того, как они влияют на наши платные продукты, запросы на внесение изменений от сообщества и финансовую поддержку, полученную за проблемы.
Лицензия - MIT Лицензия
Авторские права © Defective Code, LLC. Все права защищены
Настоящим предоставляется разрешение, безвозмездно, любому лицу, получающему копию этого программного обеспечения и сопутствующих документационных файлов (далее «Программное обеспечение»), пользоваться Программным обеспечением без ограничений, включая, но не ограничиваясь правами использовать, копировать, изменять, сливать, публиковать, распространять, предоставлять сублицензии и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это, при соблюдении следующих условий:
Указанные выше авторские права и данное разрешение должны быть включены во все копии или значительные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ ЛЮБОГО ВИДА, ЯВНЫХ ИЛИ ИМПЛИЦИТНЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОРГОВОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ И НАРУШЕНИЯ ПРАВ. В НИКАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБЫЕ ИСКИ, УЩЕРБ ИЛИ ДРУГИЕ ОБЯЗАТЕЛЬСТВА, НИ В КАКОМ УКАЗАНИИ, ДОГОВОРЕ, ДЕЛИКТЕ ИЛИ ИНОМ, ВЫТЕКАЮЩИЕ ИЗ, ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.