son - Buena plataforma Open Source Queuing?
plataformas de aprendizaje (7)
No es de código abierto, pero está bastante abierto: el servicio Queue de Amazon . Muy confiable, muy fácil de usar.
Código abierto Ruby: Beanstalkd .
JBoss tiene soporte de Java-Messaging-Service . Ver la página de bean de mensaje .
Apache tiene un producto JMS ; todos los productos Apache son de código abierto.
¿Alguien sabe de un servidor / plataforma de colas de código abierto bueno y confiable?
Estoy trabajando en un proyecto que necesitamos procesar millones de elementos de una cola por día. Mi desafío es que la cola no es FIFO, lo que significa que los elementos nuevos se priorizan y se pueden insertar en algún lugar en el medio de la cola. Además, para procesar estos elementos, utilizaremos una plataforma de distribución de servidores paralelos, por lo que es necesario acceder a la cola desde muchos servidores.
Me gusta la idea de Gaius de Amazons SQS, sin embargo, tiene un gran retraso entre los mensajes. Algunos puntos de referencia muestran un mensaje de 15-30 segundos, otros son tan lentos como un mensaje minimo. Entonces, si la velocidad es un problema, es posible que desee ejecutar su propia MOM .
Recomendaría ActiveMQ de Apache. Hemos hecho benchmarks y sus velocidades están muy cerca de las conexiones de socket. Sin embargo, nunca lo han usado en una aplicación de gran escala de producción.
ActiveMQ es un producto bastante bueno: fácil de configurar, fácil de implementar, fácil de usar. Clusterizable, muchos protocolos compatibles, etc. Estamos intentándolo en producción, parece confiable (con sus propios problemas, pero no tantos)
Intenté con JBoss Messaging, pero me pareció mucho más difícil de usar y menos maduro (es una refactorización de JBoss MQ y no es del todo estable y completa ...)
[Editar] Lo siento, no leí su pregunta con la suficiente atención ... Revisé la especificación JMS: implementa un orden de prioridad de mensajes, pero solo hay 10 niveles de prioridad en JMS, y los implementadores no están obligados a respetarlos (no revisé lo que AMQ hace) Pero la gestión de prioridades también se puede lograr mediante el uso de diferentes colas ... [/ Editar]
Escribe el tuyo, usando una tabla mysql indexada en el tiempo y la prioridad de inserción. Aunque eso no da pop atómico. Una pequeña magia orientada a las transacciones para obtener pop atómico: un campo de bandera. Actualice el elemento superior con un campo de bandera nulo para tener el identificador único de su cliente, confirmar, seleccionar un elemento con un identificador único, luego eliminarlo cuando haya terminado con el elemento. Ahora no solo tiene un sistema de colas sino también un panel de administración porque puede ver quién está trabajando en qué seleccionando todos los elementos de la tabla de colas con indicadores que no sean nulos.
Como @davidnicol menciona, puedes usar una base de datos; aunque la desventaja con una base de datos es que hace un gran equilibrio de carga en muchos hilos / procesos es algo difícil; a menudo se obtiene un hilo que bloquea el encabezado de la cola haciendo que el despacho tenga un solo subproceso.
Uno de los principales usos de una cola de mensajes es, por lo general, obtener un equilibrador de carga confiable: puede ejecutar tantos Consumidores Competentes como desee desde la misma cola para brindarle una escalabilidad masiva.
Si vas a la ruta de la cola de mensajes; entonces Apache ActiveMQ es la implementación de código abierto más popular y recomiendo comenzar con eso ya que tiene la comunidad más grande y más activa (mi métrica favorita personal para elegir entre proyectos de código abierto similares).
Hay varias formas de implementar colas de prioridad con ActiveMQ : la principal solución es lidiar con la latencia que presenta el patrón Resequencer o simplemente usar selectores y diferentes grupos de procesos / subprocesos de consumidores para diferentes rangos de prioridades es una mejor solución de baja latencia .
Si bien la implementación del selector no es la implementación de cola de prioridad más pura, tiende a funcionar mejor en la práctica, ya que evita esperar a que aparezcan mensajes de mayor prioridad; Además, evita los mensajes de baja prioridad que tardan mucho tiempo en procesar sus procesadores.
Por cierto, un aspecto diferente de tu pregunta es qué API usar para hablar con la tecnología que elijas.
Mi recomendación con cualquier middleware o infraestructura es tratar de ocultar el middleware de la lógica de su negocio como lo describe este artículo . Mantener la lógica de su negocio separada del middleware le permite cambiar fácilmente la implementación del middleware, ya que no existe realmente ninguna tecnología de middleware para todos, todos tienen sus propios pros y contras. Además, los requisitos cambian, en particular en el caso de la carga, el volumen, el rendimiento, la sincronía y la latencia, por lo que a veces es necesario cambiar la tecnología de middleware durante la vida útil de un proyecto.