🐇 Publish без подтверждений в RabbitMQ: почему так работает и что с этим делать
Сегодня разберём один практический кейс. Тема старая, но до сих пор вызывающая недопонимание: почему basic.publish в RabbitMQ по умолчанию не гарантирует доставку сообщения, и как правильно работать с подтверждениями.
🔸 Почему basic.publish не надёжен из коробки
Метод
RabbitMQ базируется именно на AMQP 0-9-1 (AMQP 1.0 добавлен с версии 4.0, но это в основном надстройки, а не новое поведение).
📌 В отличие от других методов AMQP, у
Это значит, что отправитель не знает, дошло ли сообщение до брокера.
И да — в 99.999% случаев всё будет хорошо. Но если вам нужна гарантированная доставка, на одном только basic.publish далеко не уедешь.
🔸 Зачем так сделано
AMQP создавали в JPMorgan — под задачи финансового сектора. Там есть сценарии, где огромные потоки данных (например, котировки с частотой 10k+ событий/сек) допускают потерю части сообщений. Для таких задач fire-and-forget — нормальное поведение.
Для строгой гарантированной доставки в спецификации AMQP предусмотрены транзакции.
Но:
🟢 транзакции в RabbitMQ замедляют publish до 250 раз (по данным официальной документации),
🟢 в RabbitMQ транзакции — лишь «простая форма батчинга», без ACID,
🟢 под каждый publish транзакцию заводить бессмысленно.
Итог: транзакции — рудимент, использовать их в RMQ почти никогда не стоит.
🔸 Как это исправили в RabbitMQ
Команда RabbitMQ расширила протокол AMQP и добавила механизм Publisher Confirms — подтверждения на уровне basic.publish.
Это не часть стандарта AMQP, а собственное расширение RabbitMQ.
Но именно оно стало де-факто стандартом для гарантированной доставки сообщений.
🔸 Как работает Publisher Confirms
Канал переводится в режим подтверждений методом:
После этого RabbitMQ:
считает каждое опубликованное сообщение,
отправляет
гарантирует, что отправитель узнает результат.
Главное — вызывать:
Он блокирует выполнение, пока брокер не даст ответы по всем сообщениям.
🔗 Хабр
Библиотека пхпшника
Сегодня разберём один практический кейс. Тема старая, но до сих пор вызывающая недопонимание: почему basic.publish в RabbitMQ по умолчанию не гарантирует доставку сообщения, и как правильно работать с подтверждениями.
🔸 Почему basic.publish не надёжен из коробки
Метод
basic.publish в AMQP 0-9-1 не имеет возвратной части. То есть он работает в режиме fire-and-forget — семантика at most once.RabbitMQ базируется именно на AMQP 0-9-1 (AMQP 1.0 добавлен с версии 4.0, но это в основном надстройки, а не новое поведение).
📌 В отличие от других методов AMQP, у
basic.publish нет пары some-method-ok.Это значит, что отправитель не знает, дошло ли сообщение до брокера.
И да — в 99.999% случаев всё будет хорошо. Но если вам нужна гарантированная доставка, на одном только basic.publish далеко не уедешь.
🔸 Зачем так сделано
AMQP создавали в JPMorgan — под задачи финансового сектора. Там есть сценарии, где огромные потоки данных (например, котировки с частотой 10k+ событий/сек) допускают потерю части сообщений. Для таких задач fire-and-forget — нормальное поведение.
Для строгой гарантированной доставки в спецификации AMQP предусмотрены транзакции.
В AMQP 2.2.3 прямо сказано:
«Success is silent, and failure is noisy. When applications need explicit tracking of success and failure, they should use transactions.»
Но:
🟢 транзакции в RabbitMQ замедляют publish до 250 раз (по данным официальной документации),
🟢 в RabbitMQ транзакции — лишь «простая форма батчинга», без ACID,
🟢 под каждый publish транзакцию заводить бессмысленно.
Итог: транзакции — рудимент, использовать их в RMQ почти никогда не стоит.
🔸 Как это исправили в RabbitMQ
Команда RabbitMQ расширила протокол AMQP и добавила механизм Publisher Confirms — подтверждения на уровне basic.publish.
Это не часть стандарта AMQP, а собственное расширение RabbitMQ.
Но именно оно стало де-факто стандартом для гарантированной доставки сообщений.
🔸 Как работает Publisher Confirms
Канал переводится в режим подтверждений методом:
$channel->confirm_select();После этого RabbitMQ:
считает каждое опубликованное сообщение,
отправляет
ack или nack после обработки,гарантирует, что отправитель узнает результат.
Главное — вызывать:
$channel->wait_for_pending_acks();Он блокирует выполнение, пока брокер не даст ответы по всем сообщениям.
🔗 Хабр
Библиотека пхпшника
🧠 Лайфхак: Активное использование консоли
⚡ Зачем активно использовать консоль
✅ Консоль даёт быстрый доступ к внутренним инструментам фреймворка: генерация кода, миграции, очистка кешей, тестирование, выполнение скриптов — всё через одну команду.
✅ Это экономит время: часто операции, которые вручную занимают несколько минут (создание модели + контроллера + миграции + сидера), превращаются в одну строку.
✅ Понижает рутинную нагрузку и человеческий фактор — меньше шансов допустить ошибку вручную при копи-пейсте, при генерации boilerplate-кода, при очистке кеша и т.п.
✅ Консоль позволяет быстро экспериментировать — запускать куски кода, тестировать модели, делать запросы к БД, без необходимости писать контроллеры или временные скрипты.
🔧 Что даёт консоль во Laravel & Symfony
🛠️ Основные возможности
Artisan (в Laravel) — набор встроенных CLI-команд для генерации моделей, контроллеров, миграций, фабрик, сидеров и др
Tinker — интерактивная REPL-консоль, позволяющая напрямую взаимодействовать с приложением: работать с моделями, делать запросы, проверять логику, не создавая маршруты/контроллеры.
Возможность создавать свои консольные команды — для автоматизации задач, которые повторяются: очистка кешей, рассылки, миграции, бэкапы, отчёты и др.
Планировщик задач (scheduler) — можно запускать команды по расписанию, автоматизируя фоновые процессы.
🧠 Примеры, как консоль ускоряет вашу работу
➤ Быстрая генерация структуры
Вместо ручного создания файла модели, миграции, контроллера, фабрики — просто:
(модель + миграция + фабрика + контроллер) — буквально за секунды.
➤ Эксперименты «на лету»
Открыл консоль через
➤ Автоматизация рутинных задач
Например, можно сделать команду для очистки кешей, логов, старых данных — и запускать её вручную или по расписанию, без лишних усилий.
➤ Быстрый деплой / обслуживание
Через CLI можно прогнать миграции, сброс кешей, подготовить окружение, выполнить задачи перед деплоем — удобно и надёжно.
✅ Когда и как лучше использовать
🔸 Используйте консоль, когда делаете рутинные или повторяющиеся действия: генерация кода, миграции, очистка кешей, сидинг, бэкапы.
🔸 В момент разработки — для быстрых тестов, прототипирования, проверки моделей, структур данных.
🔸 В продакшн/CI/CD — для автоматизации задач, миграций, задач обслуживания.
🔸 Создавайте собственные console-команды для специфичных задач: отчётов, задач очистки, миграций, операций над БД, фоновых job-ов.
Библиотека пхпшника
⚡ Зачем активно использовать консоль
✅ Консоль даёт быстрый доступ к внутренним инструментам фреймворка: генерация кода, миграции, очистка кешей, тестирование, выполнение скриптов — всё через одну команду.
✅ Это экономит время: часто операции, которые вручную занимают несколько минут (создание модели + контроллера + миграции + сидера), превращаются в одну строку.
✅ Понижает рутинную нагрузку и человеческий фактор — меньше шансов допустить ошибку вручную при копи-пейсте, при генерации boilerplate-кода, при очистке кеша и т.п.
✅ Консоль позволяет быстро экспериментировать — запускать куски кода, тестировать модели, делать запросы к БД, без необходимости писать контроллеры или временные скрипты.
🔧 Что даёт консоль во Laravel & Symfony
🛠️ Основные возможности
Artisan (в Laravel) — набор встроенных CLI-команд для генерации моделей, контроллеров, миграций, фабрик, сидеров и др
Tinker — интерактивная REPL-консоль, позволяющая напрямую взаимодействовать с приложением: работать с моделями, делать запросы, проверять логику, не создавая маршруты/контроллеры.
Возможность создавать свои консольные команды — для автоматизации задач, которые повторяются: очистка кешей, рассылки, миграции, бэкапы, отчёты и др.
Планировщик задач (scheduler) — можно запускать команды по расписанию, автоматизируя фоновые процессы.
🧠 Примеры, как консоль ускоряет вашу работу
➤ Быстрая генерация структуры
Вместо ручного создания файла модели, миграции, контроллера, фабрики — просто:
php artisan make:model Post -mfc(модель + миграция + фабрика + контроллер) — буквально за секунды.
➤ Эксперименты «на лету»
Открыл консоль через
php artisan tinker, написал пару строк: запросил модель, проверил данные, протестировал логику — без лишнего кода, без запуска браузера.➤ Автоматизация рутинных задач
Например, можно сделать команду для очистки кешей, логов, старых данных — и запускать её вручную или по расписанию, без лишних усилий.
➤ Быстрый деплой / обслуживание
Через CLI можно прогнать миграции, сброс кешей, подготовить окружение, выполнить задачи перед деплоем — удобно и надёжно.
✅ Когда и как лучше использовать
🔸 Используйте консоль, когда делаете рутинные или повторяющиеся действия: генерация кода, миграции, очистка кешей, сидинг, бэкапы.
🔸 В момент разработки — для быстрых тестов, прототипирования, проверки моделей, структур данных.
🔸 В продакшн/CI/CD — для автоматизации задач, миграций, задач обслуживания.
🔸 Создавайте собственные console-команды для специфичных задач: отчётов, задач очистки, миграций, операций над БД, фоновых job-ов.
Библиотека пхпшника
❤2👍2
🐘 PHP для начинающих: Маршрутизация в Laravel
В Laravel маршруты — это каркас вашего приложения. Web-маршруты живут в
Если говорить практично, ключевые вещи, которые должен помнить каждый разработчик:
• Базовые маршруты легко описывать замыканиями — удобно для простых страниц.
• Вербы маршрутов (
• Контроллеры лучше использовать, когда логика разрастается — код становится чище и масштабируемее.
• Параметры маршрутов могут быть обязательными, опциональными и ограниченными по regex.
• Именованные маршруты дают стабильные ссылки и избавляют от жёстких URL в шаблонах.
Кому важна архитектурная чистота, удобная навигация и качественная API-структура — разбор в статье ниже будет особенно полезен.
👉 Подробнее в статье — разбор всех примеров и нюансов маршрутизации Laravel.
Библиотека пхпшника
В Laravel маршруты — это каркас вашего приложения. Web-маршруты живут в
routes/web.php, API — в routes/api.php, а каналы трансляций — в routes/channels.php (появляются после install:api или install:broadcast).Если говорить практично, ключевые вещи, которые должен помнить каждый разработчик:
• Базовые маршруты легко описывать замыканиями — удобно для простых страниц.
• Вербы маршрутов (
get, post, put, delete, match, any) позволяют тонко управлять поведением приложения.• Контроллеры лучше использовать, когда логика разрастается — код становится чище и масштабируемее.
• Параметры маршрутов могут быть обязательными, опциональными и ограниченными по regex.
• Именованные маршруты дают стабильные ссылки и избавляют от жёстких URL в шаблонах.
Кому важна архитектурная чистота, удобная навигация и качественная API-структура — разбор в статье ниже будет особенно полезен.
👉 Подробнее в статье — разбор всех примеров и нюансов маршрутизации Laravel.
Библиотека пхпшника
😢2
Официальные доки — это хорошо. Но давайте честно: половину знаний мы получаем из случайных статей, чьих-то каналов и обсуждений в комментариях.
Интересно узнать:
Соберём список реально полезных мест для разработчиков. Пишите в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
📣 Многие встроенные классы Laravel имеют метод под названием «macro». Например,
Вы можете определить собственные методы для этих классов, подобно этому ☝️
Библиотека пхпшника
Collection, Str, Arr, Request, Cache, File и так далее.Вы можете определить собственные методы для этих классов, подобно этому ☝️
Библиотека пхпшника
❤1
Forwarded from Книги для программистов
Если ты давно смотришь на Laravel, но каждый раз откладываешь «до выходных, когда будет время» — вот тот самый пинок
Автор объясняет фреймворк так, чтобы опытный PHP-разработчик мог быстро въехать и начать писать живые продакшен-проекты.
Что внутри
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
💻 Подборка новостей по PHP за неделю:
🔹 CakePHP 4.6.3 — исправлены предупреждения о депрекейшнах в PHP 8.4 и 8.5, а также ошибки при работе с подзапросами, которые уже были выполнены.
🔹 PhpStorm 2025.3 — крупное обновление IDE: нативная интеграция Claude Agent, поддержка Laravel «из коробки», совместимость с PHP 8.5, улучшенная работа с дженериками и новая тема Islands.
🔹 Laravel 12.41 — представлен обновлённый современный шаблон писем, добавлены хелперы для длительностей (миллисекунды, недели, месяцы) и команда перезагрузки сервисов во время деплоя.
🔹 Symfony 8.0.2 — maintenance-релиз с исправлениями и улучшениями стабильности.
🔹 Symfony 1–7 декабря — активная работа над багфиксами после релиза Symfony 7.4 и 8.0, опубликован отчёт с SymfonyCon Amsterdam и анонсирована конференция SymfonyCon Warsaw 2026.
Библиотека пхпшника
#свежак
🔹 CakePHP 4.6.3 — исправлены предупреждения о депрекейшнах в PHP 8.4 и 8.5, а также ошибки при работе с подзапросами, которые уже были выполнены.
🔹 PhpStorm 2025.3 — крупное обновление IDE: нативная интеграция Claude Agent, поддержка Laravel «из коробки», совместимость с PHP 8.5, улучшенная работа с дженериками и новая тема Islands.
🔹 Laravel 12.41 — представлен обновлённый современный шаблон писем, добавлены хелперы для длительностей (миллисекунды, недели, месяцы) и команда перезагрузки сервисов во время деплоя.
🔹 Symfony 8.0.2 — maintenance-релиз с исправлениями и улучшениями стабильности.
🔹 Symfony 1–7 декабря — активная работа над багфиксами после релиза Symfony 7.4 и 8.0, опубликован отчёт с SymfonyCon Amsterdam и анонсирована конференция SymfonyCon Warsaw 2026.
Библиотека пхпшника
#свежак
👍4
💡 Совет по Laravel: Форматоры Faker
Поскольку Laravel использует FakerPHP для генерации фиктивных данных, вы можете использовать как
Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
#vardump
Поскольку Laravel использует FakerPHP для генерации фиктивных данных, вы можете использовать как
numerify, так и bothify для генерации данных по определенному шаблону 🚀.Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
#vardump
👍8
🚀 Symfony 7.4 — новый LTS, время апгрейда
В конце ноября 2025 вышла Symfony 7.4 — официальная Long-Term Support версия.
Это не просто «ещё одна версия»: 7.4 — серьёзный шаг к упрощению архитектуры и снижению лишнего кода, особенно если вы работаете на PHP 8.2+.
✅ Что реально даёт Symfony 7.4
Многоэкранные маршруты — теперь в атрибуте
Меньше проверок вручную — атрибут
Более гибкая безопасность — с
Унификация событий —
Возможность «допиливать» чужие классы — теперь можно добавлять атрибуты валидации/сериализации к DTO или другим классам, которые вы не контролируете. То есть, если используете сторонний класс — всё равно можно навесить свои ограничения через «прокси-классы».
🔎 Почему это важно
Symfony 7.4 — это не просто «новые фишки», это стремление к чистоте архитектуры, к уменьшению шаблонного кода и увеличению устойчивости. Это значит:
🔸 меньше boilerplate, меньше копипасты;
🔸 легче поддерживать, рефакторить и тестировать код;
🔸 проще масштабировать проекты — меньше «магии» конфигураций, больше явного, понятного кода;
🔸 долгосрочная стабильность: LTS-версия, с поддержкой багфиксов до 2028 и патчей безопасности до 2029.
Если вы всё ещё на Symfony 6.4 или 7.x — сейчас самое время планировать миграцию. Особенно, если проект живёт и будет жить несколько лет.
📅 Что делать прямо сейчас
Проверьте, что ваш PHP ≥ 8.2 — это минимальное требование для 7.4.
Проанализируйте, где у вас используются маршруты, проверки
Поднимите 7.4 на тестовом окружении, прогоните тесты — и постепенно заменяйте устаревшие YAML/аннотации/дублирование на современные атрибуты.
👉 Читать статью
Библиотека пхпшника
В конце ноября 2025 вышла Symfony 7.4 — официальная Long-Term Support версия.
Это не просто «ещё одна версия»: 7.4 — серьёзный шаг к упрощению архитектуры и снижению лишнего кода, особенно если вы работаете на PHP 8.2+.
✅ Что реально даёт Symfony 7.4
Многоэкранные маршруты — теперь в атрибуте
#[Route] env принимает массив. Можно одним маршрутом охватить, например, dev и test, и при этом его не будет в prod. Чисто, понятно, без дублирования.Меньше проверок вручную — атрибут
#[CurrentUser] теперь поддерживает union-типизации. Если в одном фаерволе используются, скажем, AdminUser и Customer, — можно сразу типизировать параметр метода как AdminUser|Customer, без ручных instanceof.Более гибкая безопасность — с
#[IsGranted] можно указывать проверку не для всего метода, а только для конкретных HTTP-методов (GET, DELETE и т.д.). Это даёт возможность держать логику (например, чтение и удаление ресурса) в одном методе, но с разным контролем доступа.Унификация событий —
#[AsEventListener] теперь поддерживает union-типы в сигнатуре: можно одним слушателем обрабатывать сразу несколько событий. Это сокращает дублирование кода и упрощает архитектуру.Возможность «допиливать» чужие классы — теперь можно добавлять атрибуты валидации/сериализации к DTO или другим классам, которые вы не контролируете. То есть, если используете сторонний класс — всё равно можно навесить свои ограничения через «прокси-классы».
🔎 Почему это важно
Symfony 7.4 — это не просто «новые фишки», это стремление к чистоте архитектуры, к уменьшению шаблонного кода и увеличению устойчивости. Это значит:
🔸 меньше boilerplate, меньше копипасты;
🔸 легче поддерживать, рефакторить и тестировать код;
🔸 проще масштабировать проекты — меньше «магии» конфигураций, больше явного, понятного кода;
🔸 долгосрочная стабильность: LTS-версия, с поддержкой багфиксов до 2028 и патчей безопасности до 2029.
Если вы всё ещё на Symfony 6.4 или 7.x — сейчас самое время планировать миграцию. Особенно, если проект живёт и будет жить несколько лет.
📅 Что делать прямо сейчас
Проверьте, что ваш PHP ≥ 8.2 — это минимальное требование для 7.4.
Проанализируйте, где у вас используются маршруты, проверки
CurrentUser, слушатели событий, валидация/сериализация — подумайте, как они могут упроститься.Поднимите 7.4 на тестовом окружении, прогоните тесты — и постепенно заменяйте устаревшие YAML/аннотации/дублирование на современные атрибуты.
👉 Читать статью
Библиотека пхпшника
PHP жил, жив и будет жить. А ты?
Рынок требует от PHP-разработчиков всё больше: понимание сложных архитектур, алгоритмическая база, умение работать с высокими нагрузками. Хватит клепать сайты-визитки.
Акция 1 + 2:
Три курса по цене одного. Оплачиваешь самый дорогой, два других — в подарок.
Твой путь к Senior:
— архитектуры и шаблоны проектирования;
— алгоритмы и структуры данных.
Прокачаться
Акция до 31 декабря.
Не знаешь, что выбрать? @manager_proglib
Рынок требует от PHP-разработчиков всё больше: понимание сложных архитектур, алгоритмическая база, умение работать с высокими нагрузками. Хватит клепать сайты-визитки.
Акция 1 + 2:
Три курса по цене одного. Оплачиваешь самый дорогой, два других — в подарок.
Твой путь к Senior:
— архитектуры и шаблоны проектирования;
— алгоритмы и структуры данных.
Прокачаться
Акция до 31 декабря.
Не знаешь, что выбрать? @manager_proglib
😁6❤1🌚1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что будет выведено данным скриптом?
Anonymous Quiz
5%
CompileError
20%
false
41%
true
20%
1
6%
0
8%
Ничего