Domanda

Sono un Noob ActiveMQ / Camel con uno scenario specifico in mente, mi chiedo innanzitutto se è possibile e in secondo luogo se qualcuno potrebbe fornire una piccola direzione.

Fondamentalmente ho bisogno di eseguire la limitazione dinamica fuori dalla coda. I.E la possibilità di impostare in fase di esecuzione la velocità con cui un determinato gruppo di messaggi verrà consumato dalla coda.

Quindi potrei, ad esempio, aggiungere un gruppo di messaggi che devono essere consumati a 10 al secondo, un altro gruppo che dovrebbe essere consumato a 1 al secondo e così via.

Conosco le basi per impostare percorsi in cammello e raggruppamento di messaggi sulla coda ecc., ma non riesco proprio a capirlo dai documenti.

È stato utile?

Soluzione

Sì, sembra che tu stia cercando una limitazione del broker per evitare che i consumatori si blocchino.

Hai sollevato la tua richiesta nel forum utente / dev di ActiveMQ?

Altri suggerimenti

Potresti semplicemente usare throttler di Camel e quindi utilizzare una coda diversa per ogni tipo di messaggi in cui è necessario configurare una diversa velocità dell'acceleratore?

per es.

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

Perché non aggiungi una RFE in Apache Camel JIRA?

Quali sono le tue logiche per determinare la tariffa per un determinato gruppo di messaggi?

Se diversi gruppi di messaggi passano attraverso lo stesso throttler, può diventare complesso. È necessario un discriminatore per determinare qualsiasi messaggio a quale gruppo appartiene e quindi con quale frequenza deve passare il throttler.

Se impieghi un po 'di tempo per compilare il tuo caso d'uso e registrare la RFE, allora sono sicuro che la community di Camel, gli sviluppatori possono aiutarti.

Puoi provare a implementarlo da solo. Fondamentalmente qualsiasi cosa è un processore, quindi puoi eseguire un processo da (" activemq: queue: foo "). (MyOwnThrottler) .to (" bean: handleMessage ");

Puoi estendere alcune delle classi in Camel: - DelegateProcessor - DelayProcessorSupport - Throttler


Claus Ibsen Apache Camel Committer

Integrazione open source: http://fusesource.com Blog: http://davsclaus.blogspot.com/

OK, esporrò lo scenario un po 'più in dettaglio e metterò in evidenza il blocco principale per quanto posso dire.

Ho 2 gruppi di messaggi (in realtà la scala sarà molto più grande), ciascuno con un diverso requisito di limitazione - Diciamo, lo specifico nell'intestazione del messaggio come flowRate e flowTime.

  • Gruppo 1: FlowRate = 1; flowTime = 60 (1 al minuto)
  • Gruppo 2: FlowRate = 1; flowTime = 1 (1 al secondo)

Implemento un processore come da Claus che esamina i campi di intestazione e li utilizza come input del ritardo.

Aggiungo 20000 messaggi dal gruppo 1 e 20000 dal gruppo 2

Poiché il throttler è lato consumer, il ritardo attivato dal gruppo 1 lo farà rallentare riempiendo rapidamente il buffer di input e i messaggi del gruppo 2 rimarranno bloccati ... anche se uso più code come James .

Mi rendo conto di poter raggruppare il messaggio utilizzando l'intestazione JMXGroupID e implementare più consumatori, ma non credo che si adatterebbe ai requisiti per ospitare n gruppi.

Quello che mi chiedevo, in sostanza, è se esiste un modo per fare broker, piuttosto che la limitazione lato consumatore, o qualche altra soluzione, per cui il consumatore può limitare senza infine bloccare.

Spero di essermi spiegato chiaramente e grazie per i suggerimenti finora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top