почтовых ящиков – клиент создает их сам при необходимости • При покупке хостинга квота на ящик увеличивается • Нужно обойти все созданные ранее ящики и увеличить им квоту – это долго – не относится напрямую к покупке хостинга • Чтобы дать клиенту воспользовать хостингом как можно быстрее: – создаем только хостинг и уведомляем об успехе – задачу по изменению квоты почтовых ящиков передаем другому процессу
(возможно, находящемуся на другом сервере) • Задачи обычно хранятся недолго • Процедуры «положить» и «взять» задачу из очереди должны выполняться быстро • Простота расширения • Надежность систем передачи и хранения
— поддержка разных бэкендов (SQL, MongoDB, файлы, write your own!) • Resque, Queue::Q — Redis backend • ZeroMQ — собственный бэкенд и протокол • RabbitMQ (и десятки других) — протокол AMQP
2003г. John O'Hara из JPMorgan Chase Bank • Цель: создать свободную реализацию протокола обмена сообщениями, который можно использовать в критически важных банковских задачах • Определяет как формат передачи данных, так и поведение клиентского и серверного ПО • Имеет множество реализаций на разных языках: – OpenAMQ – RabbitMQ – Apache Qpid – Red Hat Enterprise MRG
• Потребитель может: – просто «слушать» определенную очередь – создавать или уничтожать очереди – определять правила заполнения очередей – выбирать разные обменники, полностью меняя маршрутизацию сообщений внутри системы – подтверждать обработку сообщения или отказывать в его обработке
их в очередь(и) или в другой обменник в соответствии с заданными критериями и параметрами сообщений: – свойства сообщения (заголовки) • routing_key – содержимое • (Как вариант, может дропнуть сообщение или «вернуть» поставщику)
• Поставщик отправляет сообщение с ключом R • Сообщение передается в очередь если K == R • По умолчанию, все сообщения привязаны к безымянному обменнику, использующему имя очереди как routing_key
Поставщик отправляет сообщение в обменник • Сообщение передается в очередь сообщений безо всяких условий (то есть сообщение передается во все очереди, привязанные к обменнику)
P – шаблон: 0 или более слов ([A-Za-z0-9]+), разделенных точками – * матчится с целым словом – # - 0 или более слов • Поставщик отправляет сообщение с ключом R • Сообщение передается в очередь, если R соответствует P
аргументов с заголовками, которые должно иметь сообщение для попадания в эту очередь (и опционально их значения). routing_key не используется. • Поставщик отправляет сообщение с заголовками, содержащими таблицу имен и значений. • Если заголовки сообщения совпадают с требуемыми, оно попадает в очередь.