Versuch, mit PHP eine Verbindung zu MQ herzustellen; fast dort

8

Ich habe also die letzten paar Tage damit verbracht, dieses Problem zu lösen, das anscheinend vergessen wurde, da keine der beiden verfügbaren PECL-Erweiterungen (SAM und mqseries) seit langer Zeit aktualisiert wurde. Ich habe beides versucht und mqseries scheint mich am weitesten zu bringen, da SAM es ablehnt, mir eine Verbindung zu geben, obwohl MQ von der Kommandozeile aus perfekt funktioniert. Ich habe erfolgreich eine Verbindung zu meinem QueueManager erstellt und im nächsten Schritt (MQOPEN) versage ich kläglich:

%Vor%

Diese Ergebnisse in $ reason werden mit 2044 aufgefüllt, was in MQRC_OD_ERROR übersetzt wird, oder in Englisch: 'Auf dem MQOPEN- oder MQPUT1-Aufruf ist der Objektdeskriptor MQOD nicht gültig'.

Die Frage ist also, was stimmt nicht mit meiner MQOD?

Update # 1: An diesem Punkt ist dies nicht gelöst. Ich habe das Projekt von Grund auf neu erstellt, um Probleme während der Erstellung zu beheben. Ich bin immer noch auf MQOPEN 2044 zurück. Die Samples laufen immer noch einwandfrei von CLI, also ist dies definitiv an die Installation der PECL-Erweiterung gebunden. Wenn es jemanden gibt, der PHP erfolgreich gegen MQ in einer relativ neuen 64-Bit-PHP5-Umgebung installiert und ausgeführt hat, lassen Sie es mich wissen ...

Update # 2: MQPUT1 funktioniert fehlerfrei mit dem Problem, dass ich meine Antwort nicht erhalten kann. An diesem Punkt funktioniert MQOPEN nicht. Die Frage ist; Was bewirkt, dass MQOPEN 2044 zurückgibt, wenn MQPUT1 funktioniert, was MQOPEN einschließt?

    
eriben 28.10.2011, 19:09
quelle

1 Antwort

1

Die MQOD in der cmqch-Datei sieht folgendermaßen aus:

%Vor%

Ich frage mich, ob das Modul die Standardwerte ausfüllt und Sie dann mit dem Hash überschreiben können. Wenn ja, ist 'DeviceName' wirklich der richtige Schlüssel? Ich würde denken, dass es dem WMQ-Feldnamen oder der Konstante entsprechen würde.

Update: Pro das Beispiel am angegebenen Link stimmt der Hash-Schlüssel tatsächlich mit dem Feldname aus der cmqc.h.

Update # 2 Antwort auf Kommentar: Objekttypen wie in cmqc.h definiert sind:

%Vor%

Mein Verständnis von PHP, Perl und den meisten anderen ähnlichen Bemühungen ist, dass sie ein sehr dünner Wrapper über die C-API sind. Der Perl-Code generiert den Großteil des Codes direkt aus der cmqc.h-Datei und anderen C-Include-Dateien. Daher stimmen alle Feldnamen und Standardwerte exakt mit diesen Include-Dateien überein. Dieses Modul scheint einen ähnlichen Ansatz gewählt zu haben und ich würde erwarten, dass die definierten Namen und Feldvorgaben wo nötig verwendet werden.

Ich denke so etwas wie:

%Vor%

Update # 3 reagieren auf zusätzliche Kommentare:

Der Q Mgr akzeptiert jede Version von MQOD, greift aber auf diese Funktionalitätsebene zurück. Wenn Sie v1 verwenden, können Sie testen, ob es funktioniert. Wenn Sie spätere Versionen von MQOD verwenden möchten, müssen Sie die zusätzlichen Felder zum Hash hinzufügen.

Das 2009 ist "Connection Broken". Im Wesentlichen mochte der QMgr etwas nicht und beendete Ihre Verbindung. In der Regel sind die sinnvollen Fehlermeldungen für diesen Rückgabecode in /var/mqm/qmgrs/<qmgrname>/errors/AMQEER01.LOG .

    
T.Rob 28.10.2011 19:26
quelle

Tags und Links