Utilizzo Oracle Service Bus (OSB) come MOM e l'URI di destinazione è una coda MQ IBM. Voglio solo sapere quale sarebbe il trasporto preferito. OSB fornisce 2 adattatori per lo stesso adattatore JMS e l'adattatore MQ per il trasporto. Qualcuno sa quali sono i PRO e i CONS della stessa. TIATrasporto JMS v/s Trasporto MQ
risposta
In genere, l'invio di messaggi tramite l'interfaccia MQI nativa sarà più veloce rispetto all'utilizzo di JMS. In realtà dubito che vedrai una vera differenza, a meno che non invii tonnellate di messaggi al giorno. Tuttavia, ci sono altre cose da considerare oltre alla velocità. Ad esempio, se non si ha familiarità con le applicazioni MQI, la curva di apprendimento sarà più ripida di JMS.
Le informazioni di intestazione JMS sono mappate su un'intestazione MQRFH2 quando vengono inviate a un'altra destinazione JMS tramite MQ. L'inclusione di un'intestazione MQRFH2 viene disattivata dall'oggetto Destinazione che hai creato. Se la destinazione è un endpoint JMS, viene inclusa l'intestazione.
ho inserito un link qui sotto che spiega come i campi sono mappati:
In realtà, a meno che non si inviano milioni di messaggi al giorno presumo che le prestazioni di JMS su WebsphereMQ sarà più che adeguato alle tue esigenze. Per quanto riguarda il blocco dei thread va nella richiesta di risposta, non penso che sia necessario preoccuparsi di questo. Per impostazione predefinita, la risposta in WebsphereMQ viene utilizzata da un thread separato, non dal thread richiedente.
Dipende dal fatto che il programma all'altro capo della coda MQ si aspetta un JMS o un messaggio MQ "nativo".
MQ può fungere da meccanismo di coda nativa o da trasporto per i messaggi JMS. La differenza è che i messaggi JMS hanno alcuni campi di intestazione standard all'inizio del buffer dei messaggi e i messaggi mq "nativi" contengono solo i dati inviati dal programma al buffer.
L'app all'altra estremità riguarda solo il corpo del messaggio, non fa nulla con i campi dell'intestazione. – hakish
Questo non è proprio vero. I messaggi MQI nativi contengono anche intestazioni. Più spesso l'unico che viene utilizzato da un'applicazione è MQRFH2 (intestazione Jms), ma è possibile interagire con altri. – gregwhitaker
@gwhitake. - ma le intestazioni MQ native sono in strutture separate mentre le intestazioni JMS vengono consegnate nello stesso buffer del messaggio. –
Volevo solo aggiungere quello che ho trovato che ha funzionato per me. Devi fare quanto segue quando crei la tua istanza Queue.
Queue queue = queueSession.createQueue("queue:///" + queueName + "?targetClient=1");
//Send w/o MQRFH2 header (i.e. receiver is not a JMS client but just MQ)
L'inclusione del "? TargetClient = 1" fa sì che il messaggio grezzo da inviare w/o un colpo di testa.
Spero che questo aiuti qualcuno. Mark
prestazioni non è l'unica ragione per inviare messaggi semplici (formato MQ) senza le intestazioni JMS da JMS client al server MQ. Può anche essere che il consumer del messaggio sia un client non JMS, come Tivoli Workload Scheduler (TWS) e .net.
vi presento una soluzione per un client standalone Java e uno per JBoss AS che rimuovere il formato MQRFH2 dal messaggio JMS e di trasformarlo in un messaggio chiaro: il client
Standalone JMS
import com.ibm.msg.client.wmq.WMQConstants;
import com.ibm.mq.jms.MQQueue;
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://...);
InitialContext context = new InitialContext(env);
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup(JNDI_QUEUE_CONNECTION_FACTORY);
//the following to extra lines make sure that you send 'MQ' messages
MQQueue mqQueue = (MQQueue) iniCtx.lookup(queueJNDI);
mqQueue.setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
Destination destination = (Destination) mqQueue;
...proceed as usual...
Application Server JBoss adattatore 7 risorsa
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
<resource-adapters>
<resource-adapter>
<archive>wmq.jmsra.rar</archive>
<transaction-support>NoTransaction</transaction-support>
<connection-definitions>
<connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/jms/MqConnectionFactory" pool-name="MqConnectionFactoryPool">
<config-property name="connectionNameList">${mqserver}</config-property>
<config-property name="channel">${mqchannel}</config-property>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/jms/MyQueue" pool-name="MyQueuePool">
<config-property name="baseQueueName">${queuename}</config-property>
<config-property name="targetClient">MQ</config-property>
</admin-object>
</admin-objects>
Dall'abbondanza di esperienza personale, I consiglia vivamente di utilizzare Native MQ se possibile.
controJMS Transport (quando si utilizza WMQ) -
- tariffe dei messaggi più lento nel JMS (ho misurato!)
- L'utilizzo di file ".bindings" (che agisce come il vostro JNDI server) è ingombrante in quanto può essere Editted soltanto usando il WMQ Explorer (o lo strumento cmd JMSAdmin orribile)
- richiede conoscenze avanzate sia WMQ e Weblogic
- si richiede riavvio di y il nostro dominio OSB per ogni cambio di configurazione
L'unico principale trasporto JMS pro su MQ nativo è il supporto della transazione XA. Questo problema è stato risolto in OSB 11.1.1.7 e ora entrambi i trasporti supportano XA.
Pro MQ Native -
- più veloci
- OSB ha accesso diretto alla MQ intestazioni (questo è grande!)
- trasporto MQ nativo può essere configurato in fase di esecuzione (usando sbconsole)
- gestione facile del pool di connessione
Anche in questo caso, raccomando fortemente riparare l'uso di Native MQ Trasporto in OSB quando possibile.
Anche l'intero problema "intestazione JMS su MQ" aggiunge confusione e spazio per errori (che ho riscontrato). – selotape
Solo il mio 2c per tutti gli altri che potrebbero essere alla ricerca qui, una visione po 'aggiornati al 2017:
- librerie MQ nativi sono in "stabilizzato" stato a partire dalla versione 8.0, quindi non ci sarà nessuna nuova funzionalità aggiunta nelle prossime versioni, ci saranno solo correzioni di bug/sicurezza. Ad esempio, affermano che il consumo asincrono e la riconnessione automatica non sono disponibili in librerie non JMS.
Maggiori informazioni qui Choice of API
dichiarazione Generale dal V8 è che le nuove applicazioni dovrebbero utilizzare le classi IBM MQ per JMS.Questo naturalmente non invalida tutti i pro e i contro menzionati da Selotape. Hai ancora bisogno di un po 'più di configurazione e le prestazioni potrebbero essere inferiori fuori dalla scatola. In realtà c'è un documento MP0E per v8 che afferma di aver confrontato l'app MQ JMS Java con l'app MQI C++ e il primo era più lento del 35% a seconda dello scenario (quindi se stai facendo 50 vs 900 stai facendo qualcosa di sbagliato)
L'istruzione di IBM su Stabilization non è valida per tutte le librerie MQ native, è specifica per le classi IBM MQ per Java. L'MQI C/C++, per esempio, non è influenzato da questo annuncio. Vedere la pagina Centro informazioni di IBM MQ v9 "[Funzionalità deprecate, stabilizzate e rimosse] (https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.pro.doc/q127140_.htm#q127140___mq4javastabil)" per maggiori informazioni. "IBM non apporta ulteriori miglioramenti alle classi IBM MQ per Java e sono funzionalmente stabilizzate al livello fornito in IBM MQ Versione 8.0." – JoshMc
- 1. Webpack errori trasporto elettorali
- 2. Algoritmo di trasporto pubblico bus
- 3. Accesso a MQ con JMS
- 4. Utilizzo di Websphere MQ con JMS da un'applicazione .NET
- 5. Trasporto failover ActiveMQ - Perché così tante connessioni?
- 6. WebSphere MQ Low Latency Messaging - Ha un'API JMS (o JMS)?
- 7. Rete o livello di trasporto Fuzzing
- 8. Errore Mongo: DBClientBase :: findN: errore di trasporto()
- 9. Trasporto di fallback predefinito del client SignalR
- 10. Sicurezza trasporto app Xcode 7 beta 6
- 11. Problema di moltiplicazione del trasporto di Numpy
- 12. Trasporto socket "ssl" in PHP non abilitato
- 13. QT QWebEnginePage :: setWebChannel() oggetto di trasporto
- 14. Trasporto di scarto in javascript client
- 15. Protezione del trasporto MongoDB nel cloud
- 16. Produrre bene aggiungere con codice di trasporto da clang
- 17. Endpoint di trasporto non connesso - Mesos Slave/Master
- 18. node.js e socket.io. configurazione del tipo di trasporto per websocket?
- 19. "Impossibile leggere i dati dalla connessione di trasporto" - C#
- 20. Qual è il trasporto sottostante per D-Bus?
- 21. ICMP è un protocollo per il livello di trasporto?
- 22. Errore 'Nessun trasporto' w/jQuery chiamata ajax in IE
- 23. Contatori di continuità del flusso di trasporto MPEG
- 24. Impossibile leggere i dati dalla connessione di trasporto - TFS Edizione
- 25. Android: che cosa è il trasporto e jsonFactory in GoogleIdTokenVerifier.Builder?
- 26. controllare se il flag di trasporto è impostato
- 27. Come disabilitare la sicurezza del trasporto di Strict HTTP?
- 28. SMTPException: impossibile leggere i dati dalla connessione di trasporto: net_io_connectionclosed
- 29. Perché si verifica questo errore a livello di trasporto?
- 30. Database che utilizzano JSON come formato di archiviazione/trasporto
sì gwhitake, è un'applicazione ad alto volume su cui sto lavorando, il numero dei messaggi è decisamente nella parte alta. – hakish
Penso che anche funzionalità come la segmentazione o altre intestazioni e alcune impostazioni di sicurezza richiedano l'interfaccia MQI. – eckes