2009-10-09 15 views
5

Attualmente stiamo utilizzando IBM MQ tramite JMS, ma sembra che stia spingendo più messaggi di quanti ne possa gestire - stranamente, il problema sembra essere intermittente.WebSphere MQ Low Latency Messaging - Ha un'API JMS (o JMS)?

I messaggi sono prezzi e quindi non devono essere garantiti, devono solo essere inviati rapidamente.

Poiché IBM ha un Low Latency product, mi chiedo se sia forse la soluzione migliore, ma non sembra avere un API JMS, o almeno non facilmente visibile.

Qualcuno sa se c'è un API JMS nel prodotto bassa latenza, o se l'API "unico" che ha è JMS-like ...

In alternativa, punti di riferimento per la sintonizzazione MQ sarebbe anche apprezzato. .. :)

risposta

5

Sicuramente un prodotto di messaggistica a bassa latenza sarebbe più adatto al tuo problema, sto lavorando a un progetto in cui facciamo qualcosa di molto simile utilizzando un prodotto di messaggistica a bassa latenza chiamato LBM da 29West. Non ha un API JMS e sospetto che la maggior parte dei prodotti nello spazio a bassa latenza non lo faranno. Esiste un gran numero di funzioni che non hanno senso in combinazione con questi tipi di prodotti (ad es. Persistenza, selettori, ecc.). Abbiamo scoperto che scrivere la nostra semplice API sulla parte superiore del prodotto di messaggistica è abbastanza facile e dà la possibilità di cambiare i prodotti in un secondo momento e ci libera da parte della massa e della verbosità dell'API JMS.

Un'altra opzione da considerare sarebbe JGroups.

29West ha aggiunto il supporto JMS alla propria linea di prodotti di messaggistica.

+0

Grazie - non abbiamo in genere volumi eccessivi o requisiti di latenza stretta e la nostra soluzione precedente, Fiorano, ha funzionato correttamente. Sfortunatamente gli standard aziendali dettano IBM MQ :( –

1

Per quanto riguarda i "puntatori per la sintonizzazione MQ", su SupportPacs page esistono valutazioni delle prestazioni per piattaforma con raccomandazioni specifiche. Scorri verso il basso fino al SupportPac denominato MP * e cerca la versione e la piattaforma appropriate. Una varietà di scenari sono testati con messaggi grandi e piccoli, persistenti e non persistenti, variazioni sul numero di getter e putter, ecc.

1

Come ex sviluppatore per il prodotto LLM posso dire che lo fa o almeno lo ha fatto . Vedi sotto per un estratto l'ho presa dal call-centre a disposizione del pubblico per la versione 2.6

Detto questo, da quello che mi ricordo il punto di MQ era garantita la consegna. C'è un tempo e un posto per questo, ma ha un costo in termini di latenza e larghezza di banda.

LLM ha fondamentalmente uno scopo diverso; ha consegna affidabile: cioè se non riesce a consegnare si saprà semplicemente che non è riuscito a consegnare. La recuperabilità di questi messaggi è limitata solo da quanto si è disposti a mantenere la cache o il richiamo dal disco e, quindi, per quanto tempo si è disposti a tollerare l'attesa del recupero mentre si tiene il processo. Nel tuo caso, potresti non voler recuperare. Se LLM è giusto per te o no, non posso speculare. Quello che posso dire è che dal mio punto di vista come sviluppatore passato e successivamente come cliente, ho trovato poca o nessuna somiglianza tra i due, e le prestazioni di LLM per questo tipo di applicazione hanno fatto saltare in aria MQ completamente. Inoltre non ho mai usato molto il lato java/jms e mi sono concentrato su C/C++, quindi prendi questo con un pizzico di sale. Sapevo solo che lo faceva e dove cercarlo su google.

http://www-01.ibm.com/support/knowledgecenter/SSQPD3_2.6.0/com.ibm.wllm.doc/api/javadoc/messaging/com/ibm/llm/jms/package-summary.html

com.ibm.llm pacchetto.jms Descrizione

Implementare le classi pubbliche specifiche del provider per il client JMS LLM.

La maggior parte delle interfacce utilizzate in JMS sono definite dalle comuni interfacce JMS . Tuttavia, le specifiche JMS non includono le classi e le interfacce necessarie per configurare il client JMS.

Vedere la documentazione dell'API JMS per informazioni sulle classi JMS e sui metodi.

Introduzione

Il client LLM JMS fornisce un'interfaccia Java Message Service (JMS) per LLM. L'utilizzo dell'interfaccia JMS per LLM consente un'interfaccia comune con altri provider di messaggistica e velocizza lo sviluppo delle applicazioni con consentendo agli sviluppatori di utilizzare interfacce con le quali hanno familiarità. Utilizzando l'interfaccia JMS funziona meglio per le applicazioni che utilizzano la funzione di messaggistica generica in cui le impostazioni possono essere amministrate centralmente. Questo include molte applicazioni client tradizionali. Il client LLM JMS non funziona anche dove l'applicazione dipende dalle funzioni specifiche LLM o che richiedono l'interazione significativa dell'applicazione con LLM. Mentre è aggiunta una certa latenza utilizzando l'interfaccia JMS , fornisce ancora una latenza molto bassa e un throughput elevato con la messaggistica .

Il client LMS JMS supporta la maggior parte delle funzioni client LLM, ma non supporta la funzione server di esecuzione all'interno di un livello o il trasferimento del trasmettitore di bilancia .

LLM si basa sul fare il produttore diretto alla messaggistica consumer. JMS è normalmente implementato utilizzando un server di messaggi e la funzione JMS che richiede che il server di messaggi non sia disponibile quando si utilizza il client LLM J2 . Ciò include tutte le comunicazioni point-to-point (code) e anche la funzione di recupero . Il client LMS JMS è progettato per essere eseguito in un ambiente JSE e non supporta le estensioni del server delle applicazioni o le transazioni XA .

Come client LLM JMS implementa JMS

Il client LLM JMS implementa ciascuno degli oggetti JMS fondamentali con una classe di attuazione che non è esposto all'esterno. Le sottoclassi di questi oggetti vengono implementate utilizzando la stessa classe di implementazione . Ciò significa che ci sono solo due oggetti amministrati , ConnectionFactory e Destination. Definizione LLM ConnectionFactory può essere trasmesso a TopicConnectionFactory e QueueConnectionFactory e una destinazione definita LLM può essere trasmessa a Argomento e coda. Lo stesso vale per Connection, Session, MessageProducer e MessageConsumer. L'oggetto di destinazione da un fornitore deve essere utilizzato con una connessione dallo stesso provider. Tuttavia, è possibile inviare un messaggio prodotto da un provider JMS a un altro provider JMS. L'invio di un messaggio creato da un altro fornitore JMS non è efficiente come inviare un messaggio creato dal client JMS LLM , ma questa funzione viene fornita per semplificare l'esecuzione di un'applicazione di da un provider all'altro.

Il client LMS JMS non implementa il modello di messaggistica point-to-point (code), ma è possibile creare tutti gli oggetti JMS.

Il cliente LLM JMS richiede una JVM di almeno Java 5.

Il cliente LLM JMS definisce tutti gli oggetti di tipo sei un messaggio (Message, BytesMessage, MapMessage, ObjectMessage, StreamMessage, e TextMessage). Quando si invia un messaggio da JMS a JMS, l'intestazione JMS indica il tipo di messaggio. Se manca l'intestazione JMS (che è comune quando si invia un messaggio da un produttore non JMS), il client LLM J2 tenta di dedurre il tipo di messaggio dal contenuto. Normalmente il messaggio verrà visualizzato come BytesMessage, ma se il messaggio inizia con un BOM UTF-8 o sembra essere XML, verrà interpretato come un messaggio di testo. Si presuppone che i messaggi di testo siano codificati in UTF-8 ......