OK, in base ai commenti, ecco un suggerimento che si ridimensionerà e non richiede molti cambiamenti sulle app.
Per quanto riguarda il produttore, copiare i criteri di selezione dei messaggi in una proprietà del messaggio e quindi pubblicare il messaggio in un argomento. L'unica modifica richiesta qui all'app è la proprietà message. Se per qualche motivo non vuoi renderlo pubblico utilizzando la funzionalità nativa, puoi definire un alias su un argomento. L'app pensa che stia inviando messaggi ma in realtà sono pubblicazioni.
Per quanto riguarda il consumatore, ci sono un paio di scelte. Uno è quello di creare abbonamenti amministrativi per ogni app e utilizzare un selettore nella sottoscrizione. I messaggi vengono quindi canalizzati in una coda dedicata per utente, in base ai criteri di selezione. Le app pensano che stiano semplicemente consumando messaggi.
In alternativa l'app può semplicemente iscriversi all'argomento. Questo ti dà la possibilità di una sottoscrizione dinamica che non riceve messaggi quando l'app è disconnessa (se in realtà lo volevi) o una sottoscrizione duratura che è funzionalmente equivalente all'abbonamento amministrativo.
Questa soluzione è facilmente scalabile in base ai volumi citati. Un'altra opzione è che il produttore non usa le proprietà.Qui, l'applicazione consumer consuma tutti i messaggi, interrompe il carico utile del messaggio su ciascuno e decide se elaborare o ignorare il messaggio. In questa soluzione il produttore pubblica ancora su un argomento. Qualsiasi soluzione implicante la messa in coda diretta costringe il produttore a conoscere tutte le destinazioni. Aggiungi un altro consumatore, cambia il produttore. Inoltre, c'è un PUT per ogni destinazione.
Il caso peggiore è un produttore che mette più messaggi e un consumatore che deve leggere ognuno per decidere se verrà ignorato. Questa opzione potrebbe avere problemi di ridimensionamento, a seconda di quanto sia profondo il carico utile nel campo dei criteri di selezione. Espressione XPath veramente lunga = prestazioni scadenti e nessun modo per regolare WMQ per compensare poiché la latenza è tutta nell'applicazione in quel punto.
Nel caso migliore, il produttore imposta una proprietà messaggio e pubblica. I consumatori selezionano sulla proprietà nel loro abbonamento o un abbonamento amministrativo fa questo per loro. Se questa soluzione utilizza sottoscrizioni o abbonamenti amministrativi non fa alcuna differenza per quanto riguarda la scalabilità.
fonte
2011-10-30 19:30:07
Cosa c'è di diverso sui messaggi che devono essere ignorati? Ci sono diverse opzioni qui: selettori, argomenti, proprietà. Quale da usare dipende da come l'app o QMgr dovrebbero distinguere quali messaggi sono rilevanti. –
Ciao @ T.Rob l'intestazione del messaggio per tutti i 10 sarà la stessa, ma il contenuto sarà diverso. Quindi potremmo guardare l'intestazione per determinare se il contenuto del messaggio è rilevante o meno. La linea di fondo è per due dei messaggi che non vogliamo che uno degli abbonati ottenga quelli. – scarpacci