Я читал в очереди сообщений в последнее время, и я хотел бы реализовать простую, расширяемую систему для своего приложения. Хотя есть много хорошей информации по вопросу о создании системы MQ, я не могу много узнать о фактической реализации.
Я ищу шаблоны и рекомендации по правильному форматированию сообщений для очереди и способам выполнения заданий в PHP. Должен ли я использовать JSON, сериализованные объекты, текст, URL-адреса или XML? Какую информацию я должен отправлять? Является ли рабочий с switch($job['command']) {}
(или что-то в этом роде), путь или какие-либо установленные шаблоны для реализации рабочего?
Помощь очень ценится!
Вы можете выбрать любую из следующих реализаций MQ в PHP, поэтому вам не нужно сворачивать самостоятельно, и вы можете посмотреть их исходный код, чтобы узнать об их реализации. Для общей интеграции взгляните на страницу ActiveMQ на шаблонах Enterprise Integration .
http://sourceforge.net/projects/beanstalk/
Клиентская библиотека PHP для beanstalkd. BeanStalk позволяет разработчикам PHP использовать сервер bequestalkd in-memory workqueue ( http://xph.us/software/beanstalkd ).
http://kr.github.com/beanstalkd/
Beanstalk – это простое, быстрое обслуживание на рабочем месте. Его интерфейс является общим, но первоначально был разработан для уменьшения латентности просмотров страниц в больших объемах веб-приложений за счет выполнения многозадачных задач асинхронно.
Apache ActiveMQ – самый популярный и мощный поставщик сообщений с открытым исходным кодом и интеграционных шаблонов. Apache ActiveMQ работает быстро, поддерживает множество кросс-языковых клиентов и протоколов, имеет простые в использовании шаблоны интеграции предприятия и множество дополнительных функций, полностью поддерживая JMS 1.1 и J2EE 1.4. Apache ActiveMQ выпущен под лицензией Apache 2.0
http://memcachedb.org/memcacheq/
Memcachedb – это распределенная система хранения ключевых значений, предназначенная для постоянной работы. Это не решение для кеша, а постоянное хранилище для высокочастотной записи и чтения. Он соответствует протоколу memcache (не завершен, см. Ниже), поэтому любой клиент memcached может иметь возможность подключения к нему. Memcachedb использует Berkeley DB в качестве хранилища бэкэнда, поэтому поддерживается множество функций, включая транзакцию и репликацию.
http://www.zend.com/en/products/server/
Zend Server 5.0 включает в себя Job Queue, обеспечивая полную поддержку для создания, выполнения и управления заданиями для оптимизации производительности приложений и снижения нагрузки на сервер, минимизации узких мест приложений и улучшения работы конечных пользователей.
dropr – это распределенная структура очереди сообщений, написанная на PHP. Основные цели:
- надежная и долговечная (отказоустойчивая) работа по сетям
- децентрализованная архитектура без единого экземпляра сервера (точка отказа)
- легко настроить и использовать
- модульность для хранения в очереди и транспорта сообщений (в настоящее время реализовано хранение файловой системы и завивка)
Gearman предоставляет общую инфраструктуру приложений для работы с другими машинами или процессами, которые лучше подходят для работы. Он позволяет выполнять параллельную работу, обрабатывать баланс нагрузки и вызывать функции между языками.
ØMQ (также записанный ZeroMQ, 0MQ или ZMQ) – это высокопроизводительная асинхронная библиотека обмена сообщениями, предназначенная для использования в масштабируемых распределенных или параллельных приложениях. Он обеспечивает очередь сообщений, но в отличие от ориентированного на сообщения промежуточного программного обеспечения система ØMQ может работать без специального брокера сообщений. Библиотека разработана так, чтобы иметь знакомый API-интерфейс сокета.
Я бы использовал JSON, если можно, – он краток, легко читается и работает на разных языках.
Одна из причин, по которой вы не сможете использовать JSON, – это если вы хотите, чтобы ваше фоновое «задание» включало не только данные (в этом случае JSON будет в порядке), но и сериализованный объект. Если это так, вам нужно сделать хотя бы один из аргументов задания сериализованным PHP.