net - rabbitmq php
¿La mejor biblioteca cliente de PHP para acceder a RabbitMQ(AMQP)? (6)
Alguna información de la revisión inicial:
https://github.com/tnc/php-amqplib bifurcó http://code.google.com/p/php-amqplib/ en un punto desconocido en el pasado y no tiene un historial claro ni muestra qué se cambió. lo que resulta en una desafortunada fragmentación de esfuerzos. Tampoco parece estar al día con las correcciones de errores que se aplican al original, algunas de las cuales han aparecido en los últimos meses.
También http://code.google.com/p/php-amqplib/ parece que ya no está en desarrollo activo, y un parche incorrecto se aplicó hace más de un mes, dejando el tronco en un estado descompuesto. (Envié un parche para arreglarlo, pero esta es una mala señal).
Hay una lista de clientes PHP en el sitio RabbitMQ . Estoy haciendo esta pregunta con la esperanza de que las personas que hayan usado cualquiera de estos puedan compartir sus experiencias aquí. P.ej
- ¿Tuviste problemas para instalar?
- ¿Es estable?
- ¿Hubo algún problema de rendimiento?
- ¿Cómo es la documentación / soporte?
Incluso si acaba de utilizar una de estas bibliotecas, comparta sus experiencias.
Como referencia, estos son algunos de los clientes enumerados:
- Página de manual de PHP para AMQP
- php-amqp - un cliente desarrollado y utilizado por StudiVZ, originalmente basado en RabbitMQ-C
- php-amqplib un puerto de py-amqplib
- php-amqplib un fork de php-amqplib actualizado para soportar PHP 5.3
- Lanzamiento PECL del cliente AMQP
PD: Sé que "lo mejor ..." es "subjetivo", pero el objetivo de esta pregunta es recopilar experiencias y ayudar a las personas a tomar una decisión informada sobre estas bibliotecas de AMQP. Por favor, no cierre bruscamente esta pregunta solo porque tiene la palabra "mejor" en ella.
PPS Estoy usando PHP 5.3 en RHEL 5.
Como referencia, PECL AMQP Extension y http://php.net/manual/fa/book.amqp.php son lo mismo, uno es el paquete y el otro es la documentación del paquete.
Como mantenedor de la extensión oficial de PHP AMQP, soy un poco parcial. Muchas personas usan esta extensión en entornos de producción de baja latencia de alto volumen, ya que es mucho más rápido que uno escrito en PHP nativo. Además, dado que constantemente uso esto en mi trabajo, tengo que mantenerlo funcionando y actualizado.
El inconveniente de esta extensión es que aún no está disponible para Windows, ya que la biblioteca de la que depende se está portando actualmente. No hay compatibilidad ETA para Windows, pero tan pronto como las dependencias admitan Windows, nuestro objetivo es transferir la extensión a Windows también.
Esta biblioteca parece estar activa y tiene éxito el original de code.google:
https://github.com/videlalvaro/php-amqplib
También hay pruebas y Travis CI.
Estamos trabajando en la interoperabilidad de AMQP . Intenta identificar y estandarizar una forma común para que los programas PHP creen, envíen, reciban y lean mensajes MQ a través de AMQP para lograr la interoperabilidad.
Si realiza una apuesta, puede comenzar con cualquier transporte compatible con interoperabilidad. Todavía podrá cambiarlo en el futuro, no está bloqueado.
Actualmente enqueue/amqp-ext y enqueue/amqp-lib . El primero funciona además de la extensión php amqp, donde otro adopta phpamqplib.
Habiendo examinado tanto php-amqp como la versión PECL, mi impresión es que se implementa un soporte básico para publicar y consumir mensajes. Sin embargo, solo funcionarán de forma predeterminada en las plataformas * NIX. Deberá pasar por aros para que funcionen en Windows (lo que puede o no ser un problema según su plataforma de desarrollo o implementación).
Bonificación: https://github.com/tnc/php-amqplib se utiliza en el libro de MEAP "RabbitMQ en acción". Si eso tendrá alguna influencia en su adopción aún está por verse.
También hay https://github.com/bkw/php-amqp/ que creo que es un espejo de http://code.google.com/p/php-amqplib/ . He tenido algunos problemas con ese código: mensajes de aviso durante el funcionamiento normal y todo tipo de errores y advertencias cuando hay algún problema. El código también toma la palabra del manual de PHP por sentado; por ejemplo, las llamadas de lectura de socket solo se comparan con un retorno de error, mientras que de hecho estoy descubriendo que un socket close / timeout puede estar indicado por cualquiera de las 4 condiciones diferentes.
Estoy empezando a pensar que una solución de biblioteca compilada (es decir, una extensión PHP) es la mejor opción, sobre todo porque hay problemas de subprocesamiento y socket, y PHP maneja mal.