Pregunta

Soy un novato de ActiveMQ / Camel con un escenario específico en mente, en primer lugar, me pregunto si es posible y, en segundo lugar, si alguien podría dar una pequeña dirección.

Básicamente, necesito realizar una aceleración dinámica de la cola. I.E la capacidad de establecer en tiempo de ejecución la tasa de consumo de un grupo particular de mensajes de la cola.

Entonces, podría, por ejemplo, agregar un grupo de mensajes que se van a consumir a 10 por segundo, otro grupo que se debe consumir a 1 por segundo y así sucesivamente.

Conozco los conceptos básicos de la configuración de rutas en camello y agrupación de mensajes en la cola, etc., pero simplemente no puedo resolver esto de los documentos.

¿Fue útil?

Solución

Sí, parece que está buscando una aceleración del lado del corredor para evitar que los consumidores bloqueen.

¿Ha planteado su solicitud en el foro de usuarios / desarrolladores de ActiveMQ?

Otros consejos

Podrías usar el estrangulador existente de Camel y luego usar una cola diferente para cada tipo de mensajes donde necesita configurar una velocidad de aceleración diferente?

por ejemplo

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  

¿Por qué no agrega un RFE en Apache Camel JIRA?

¿Cuál es su lógica para determinar la velocidad de un grupo dado de mensajes?

Si un grupo diferente de mensajes pasa por el mismo regulador, puede volverse complejo. Necesita un poco de discriminador para determinar cualquier mensaje al grupo al que pertenece y, por lo tanto, a qué velocidad debe pasar el acelerador.

Si se toma un tiempo para completar su caso de uso y registrar el RFE, entonces estoy seguro de que la comunidad Camel, los desarrolladores pueden ayudarlo.

Puede intentar implementarlo usted mismo. Básicamente, cualquier cosa es un procesador, por lo que puede hacer un from (" activemq: queue: foo "). Process (myOwnThrottler) .to (" bean: handleMessage ");

Puedes extender algunas de las clases en Camel: - DelegateProcessor - DelayProcessorSupport - Acelerador


Claus Ibsen Apache Camel Committer

Integración de código abierto: http://fusesource.com Blog: http://davsclaus.blogspot.com/

OK, expondré el escenario con un poco más de detalle y resaltaré el bloqueador principal por lo que puedo decir.

Tengo 2 grupos de mensajes (en realidad, la escala será mucho mayor), cada uno con un requisito de limitación diferente. Digamos que especifico esto en el encabezado del mensaje como flowRate y flowTime.

  • Grupo 1: FlowRate = 1; flowTime = 60 (1 por minuto)
  • Grupo 2: FlowRate = 1; flowTime = 1 (1 por segundo)

Implemento un procesador según Claus que examina los campos de encabezado y los usa como entrada de retardador.

Agrego 20000 mensajes del grupo 1 y 20000 del grupo 2

Debido a que el acelerador es del lado del consumidor, el retardador activado por el grupo 1 hará que se ralentice al llenar rápidamente su búfer de entrada y los mensajes del grupo 2 se atascarán ... incluso si uso múltiples colas según James .

Me doy cuenta de que puedo agrupar el mensaje usando el encabezado JMXGroupID e implementar múltiples consumidores, pero no creo que eso se ajuste al requisito de acomodar grupos n .

Lo que me preguntaba, básicamente, es si hay alguna forma de hacer intermediarios, en lugar de limitar el lado del consumidor, o alguna otra solución, por lo que el consumidor puede estrangular sin bloquear en última instancia.

Espero haberme explicado claramente y gracias por las sugerencias hasta ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top