Как лучше всего форматировать сообщения для очередей? - PullRequest
8 голосов
/ 15 марта 2010

В последнее время я читаю очередь сообщений, и я хотел бы реализовать простую, расширяемую систему для моего приложения. Хотя есть много полезной информации о настройке системы MQ, я не могу найти много информации о фактической реализации.

Я ищу шаблоны и рекомендации по правильному форматированию сообщений для очереди и способам выполнения заданий в PHP. Должен ли я использовать JSON, сериализованные объекты, текст, URL или XML? Какую информацию я должен отправить? Работник с switch($job['command']) {} (или что-то в этом роде) - это путь, или есть какие-то установленные шаблоны для реализации работника?

Помощь с благодарностью!

Ответы [ 2 ]

8 голосов
/ 15 марта 2010

Вы можете выбрать любую из следующих реализаций MQ в PHP, поэтому вам не нужно накатывать свои собственные, и вы можете посмотреть на их исходный код, чтобы узнать об их реализации. Для общей интеграции взгляните на страницу ActiveMQ по шаблонам Enterprise Integration .

  • http://sourceforge.net/projects/beanstalk/

    Клиентская библиотека PHP для beanstalkd. BeanStalk позволяет разработчикам PHP использовать сервер рабочих задач beanstalkd в памяти (http://xph.us/software/beanstalkd).

  • http://kr.github.com/beanstalkd/

    Beanstalk - это простой и быстрый сервис для работы в очереди. Его интерфейс является универсальным, но изначально он был разработан для уменьшения задержки просмотра страниц в веб-приложениях большого объема за счет асинхронного выполнения трудоемких задач.

  • http://activemq.apache.org/

    Apache ActiveMQ - самый популярный и мощный поставщик сообщений и шаблонов интеграции с открытым исходным кодом. Apache ActiveMQ работает быстро, поддерживает множество межъязыковых клиентов и протоколов, поставляется с простыми в использовании шаблонами Enterprise Integration и множеством расширенных функций, полностью поддерживая 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 включает в себя очередь заданий, предоставляя полную поддержку для создания, выполнения и управления заданиями, чтобы оптимизировать производительность приложений и снизить нагрузку на сервер, минимизируя узкие места приложений и улучшая работу конечных пользователей.

  • https://www.dropr.org/

    dropr - это структура распределенной очереди сообщений, написанная на PHP. Основные цели:

    • надежная и долговечная (отказоустойчивая) передача сообщений по сетям
    • децентрализованная архитектура без единого (точка отказа) экземпляра сервера
    • прост в настройке и использовании
    • модульность для хранения очереди и транспорта сообщений (в настоящее время реализовано хранение в файловой системе и загрузка curl)
  • http://gearman.org/

    Gearman предоставляет универсальную прикладную среду для переноса работы на другие машины или процессы, которые лучше подходят для этой работы. Это позволяет выполнять работу параллельно, обрабатывать балансировку нагрузки и вызывать функции между языками.

  • http://www.zeromq.org/

    ØMQ (также пишется ZeroMQ, 0MQ или ZMQ) - это высокопроизводительная библиотека асинхронного обмена сообщениями, предназначенная для использования в масштабируемых распределенных или параллельных приложениях. Он обеспечивает очередь сообщений, но в отличие от промежуточного программного обеспечения, ориентированного на сообщения, система ØMQ может работать без выделенного посредника сообщений. Библиотека разработана для использования знакомого API в стиле сокетов.

1 голос
/ 18 марта 2010

Я бы использовал JSON, если вы можете - это сжато, легко читается и работает на разных языках.

Одна из причин, по которой вы не сможете использовать JSON, заключается в том, что вы хотите, чтобы фоновое «задание» включало не только данные (в этом случае JSON подойдет), но и сериализованный объект. Если это так, вам нужно сделать хотя бы один из аргументов задания сериализованным PHP.

...