2010-03-29 8 views
5

Jestem nowy MQSeries i zacząłem z przekleństwami IBM WebSphere MQ. Istnieją przykłady z menedżerami kolejek MQ_APPLE i MQ_ORANGE. Nie mam problemu z wysyłaniem wiadomości do lokalnej lub zdalnej kolejki za pomocą MQ Explorer, ale chciałem wysłać taką wiadomość z kodu: Python lub Java. Próbowałem Pythona pymqi bibliotekę z kodem jak poniżej:Jak połączyć się z lokalną kolejką MQseries za pomocą języka Python?

import pymqi 

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

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

ale otrzymuję błąd:

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 

Istnieje QM_APPLE menedżer kolejek z Q1 kolejki lokalnej.

Co jest nie tak z moim kodu?

Odpowiedz

3

podstawie błędu wydaje się, że próbujesz połączyć się ze zdalnym menedżerem kolejek, ale używasz metody powiązań lokalnego menedżera kolejek podłączyć. Mówię to, ponieważ błąd mówi, że klient mqi nie wie, z którym kanałem się połączyć. Czy możesz wyjaśnić, czy używasz lokalnego menedżera kolejek, czy zdalnego menedżera kolejek? Wkleiłem poniższy kod, aby połączyć się ze zdalnym menedżerem kolejek za pomocą kanału.

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

chcę użyć kolejki lokalnej. AFAIK nie ma kanału. Kanał pojawia się na lekcji o wysyłaniu wiadomości w konfiguracji klient-serwer (mam też problemy z tą lekcją). Ukończyłem lekcję dotyczącą wysyłania wiadomości za pomocą lokalnych i zdalnych kolejek i chciałem zrobić to z kodu. –

+0

Jak powiedział T.Rob, wygląda na to, że używasz modułu pymqi, który jest zbudowany w trybie klienta. Jeśli chcesz użyć powiązania (lokalny menedżer kolejek, bez kanału), musisz użyć modułu pymqi wbudowanego w tryb serwera. Sprawdź ten link: http://packages.python.org/pymqi/index.html#download-build-install W przeciwnym razie możesz po prostu utworzyć kanał w lokalnym menedżerze kolejek i użyć metody connectTCPClient, np. powyżej. – gregwhitaker

+0

Stworzyłem kanał typu 'receiver', ale nie mogę go aktywować. Jakiego rodzaju kanał powinienem utworzyć? –

2

Twój post wspomina, że ​​chcesz uruchomić to w Pythonie lub Javie. Python Nie mogę pomóc, ale poprzedni odpowiadający, tak fajnie. Jeśli chodzi o Javę, może wskażę ci właściwy kierunek. IBM obsługuje zarówno Java, jak i JMS i udostępnia wiele przykładowych programów każdego z nich. Domyślnie są one instalowane w:

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

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

ja również oferują własne przykładowy kod tutaj: http://www.ibm.com/developerworks/websphere/techjournal/0610_woolf/0610_woolf.html

dokumentacja dla realizacji IBM API Java i JMS WMQ jest tutaj: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/uj10120_.htm

Docs znalazłem w module Python pojawia się komunikat, że musi on być powiązany z bibliotekami klienta lub serwera WMQ, a Twój błąd wskazuje, że masz powiązane powiązania klientów. Jeśli tak jest, musisz podać informacje o połączeniu, jak wskazano na poprzedniej stronie. Kod Java i JMS obsługuje oba typy połączeń, więc nie trzeba tworzyć powiązań, ale nadal trzeba podać poprawne szczegóły połączenia. W szczególności, należy zapoznać się z rozdziałem na różnicach przyłączy: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/ja11010_.htm

- T.Rob

+0

Masz rację. Użyłem powiązań klienta, podczas gdy tylko taki typ modułu jest dostępny w formie prekompilowanej. W próbkach znalazłem 'MQSample.java' i wygląda na to, że działa. Dziękuję Ci. –

Powiązane problemy