Domanda

Al lavoro che stiamo discutendo se o non implementare una coda di messaggi per la nostra applicazione PHP. Al momento stiamo cercando di ActiveMQ di Apache. Una cosa che non siamo del tutto chiaro su è se non è possibile innescare un processo basato su un messaggio in arrivo in una coda.

La letteratura che abbiamo trovato finora sembra indicare che i messaggi code sono un meccanismo pull-based: il processo viene eseguito regolarmente (sia come un demone o un cron), e tira i suoi messaggi in arrivo dalla coda. E 'possibile trasformare questo in un meccanismo di spinta? Cioè, c'è un modo per avere il Message Queue effettivamente avviare una richiesta HTTP (o di un processo), quando arriva un messaggio? Una possibilità che abbiamo trovato è il publish / subscribe modello, ma questo richiede in esecuzione il nostro PHP applicazione in un ciclo infinito di mantenere una connessione aperta (TCP) per l'istanza ActiveMQ, che si sente come un po 'un kludge.

Qualsiasi input sarebbe molto apprezzato.

È stato utile?

Soluzione

Una soluzione ovvia è quella di lasciare l'editore avviare la richiesta HTTP a destra dopo aver memorizzato il messaggio, ma si pone la questione, perché allora si utilizza una coda di messaggi?

Avere un insieme di consumatori in ascolto su una coda e fare il loro lavoro come i messaggi arrivano non è un ripiego, è bene, design scalabile. (Anche se sono d'accordo che l'esecuzione di un processo di PHP in un ciclo infinito ha i suoi svantaggi.)

Perché avete scelto una coda di messaggi in contrasto con, ad esempio, un database che memorizza i messaggi? Il "produttore" potrebbe salvare il messaggio come una riga in una tabella e poi far scattare il "consumatore" con PK del messaggio.

Altri suggerimenti

Considerare la creazione di un percorso cammello che tira i messaggi dalla coda (componente JMS) e in avanti a un endpoint HTTP (componente HTTP). Si può anche decidere di ospitare il percorso Camel sul processo broker di ActiveMQ - la creazione di una sorta di mediatore di routing intelligente. ActiveMQ rende questo facile per riunire le librerie Camel fondamentali nella distribuzione ActiveMQ.

Ecco un recente post rilevante / correlato:

HTTP Post Da ActiveMQ utilizzando Camel

Il concetto di design di un app per monitorare la coda è il modo in cui l'industria di innescare un programma esterno da eseguire. Date un'occhiata a IBM WebSphere "Applicazioni Trigger Monitor". Nella loro attuazione è possibile avere più monitor di trigger per avviare le applicazioni che i messaggi di processo in una coda, quindi si evolve molto bene come le piste controllo dei trigger sul server le applicazioni sono installate (e se si progetta per la scalabilità a si dovrebbe essere in grado di avere diverse app server, se necessario).

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