2010-03-29 9 views
5

Sono nuovo in mqseries e ho iniziato con IBM WebSphere MQ curses. Esistono esempi con i gestori code MQ_APPLE e MQ_ORANGE. Non ho problemi con l'invio di messaggi alla coda locale o remota con MQ Explorer, ma volevo inviare questo messaggio dal codice: Python o Java. Ho provato Python Library pymqi con codice come questo:Come connettersi alla coda MQseries locale usando Python?

import pymqi 

qmgr = pymqi.QueueManager(None) 
qmgr.connect('QM_APPLE') 

putq = pymqi.Queue(qmgr, 'Q1') 
putq.put('Hello from Python!') 

ma ricevo l'errore:

Traceback (most recent call last): 
    File "mq_put.py", line 4, in <module> 
     qmgr.connect('QM_APPLE') 
    File "c:\Python26\lib\site-packages\pymqi.py", line 758, in connect 
     raise MQMIError(rv[1], rv[2]) 
pymqi.MQMIError: MQI Error. Comp: 2, Reason 2540: FAILED: MQRC_UNKNOWN_CHANNEL_NAME 

C'è QM_APPLE gestore code con Q1 code locale.

Cosa c'è di sbagliato nel mio codice?

risposta

3

In base all'errore, sembra che si stia tentando di connettersi a un gestore code remoto, ma si sta utilizzando il metodo di binding del gestore code locale per connettersi. Dico questo perché l'errore sta affermando che il client mqi non sa a quale canale connettersi. Puoi chiarire se stai utilizzando un gestore code locale o un gestore code remoto? Ho incollato il codice qui sotto per collegarmi a un gestore code remoto usando un canale.

import pymqi 

queue_manager = "QUEUE_MANAGER_NAME" 
channel = "SVRCONN.1" 
host = "host.domain.com" 
port = "1434" 
conn_info = "%s(%s)" % (host, port) 

qmgr = pymqi.QueueManager(None) 
qmgr.connectTCPClient(queue_manager, pymqi.cd(), channel, conn_info) 
+0

voglio usare coda locale. AFAIK non c'è un canale. Il canale appare sulla lezione sull'invio di un messaggio nella configurazione client-server (ho anche problemi con questa lezione). Ho completato la lezione sull'invio di messaggi utilizzando code locali e remote e volevo farlo dal codice. –

+0

Come ha detto T.Rob, sembra che si stia utilizzando un modulo pymqi costruito in modalità client. Se si desidera utilizzare una connessione binding (gestore code locale, nessun canale) è necessario utilizzare un modulo pymqi integrato in modalità server. Controlla questo link: http://packages.python.org/pymqi/index.html#download-build-install Altrimenti, puoi sempre creare un canale sul gestore code locale e utilizzare il metodo connectTCPClient come sopra. – gregwhitaker

+0

Ho creato un canale di tipo 'receiver', ma non riesco ad attivarlo. Che tipo di canale dovrei creare? –

2

Il post cita vuoi questo per l'esecuzione in Python o Java. Python non posso fare a meno di farlo, ma il precedente risponditore lo ha fatto, davvero fantastico. Per quanto riguarda Java, forse posso indicarti la giusta direzione. IBM supporta sia Java che JMS e fornisce una serie di programmi di esempio per ciascuno. Per impostazione predefinita, questi sono installati in:

C: \ Program Files \ IBM \ WebSphere MQ \ Tools \ wmqjava

C: \ Program Files \ IBM \ WebSphere MQ \ tools \ JMS

anche io offrire il mio codice di esempio qui: http://www.ibm.com/developerworks/websphere/techjournal/0610_woolf/0610_woolf.html

la documentazione per l'attuazione di IBM delle API Java e JMS WMQ è qui: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/uj10120_.htm

la documentazione che ho trovato sul modulo Python appare per indicare che deve essere collegato alle librerie Client o Server WMQ e il tuo errore sembra indicare che hai collegato i binding dei client. In tal caso, è necessario fornire le informazioni sulla connessione come indicato nel post precedente. Il codice Java e JMS supporta entrambi i tipi di connessione, pertanto non è necessario eseguire collegamenti, ma è comunque necessario fornire i dettagli di connessione appropriati. In particolare, si prega di leggere il capitolo sulle differenze di collegamento: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/ja11010_.htm

- T.Rob

+0

Hai ragione. Ho usato i binding client mentre solo un tipo di modulo è disponibile in forma precompilata. Negli esempi ho trovato 'MQSample.java' e sembra funzionare. Grazie. –

Problemi correlati