Nachrichtentypen

Es gibt vier Typen von Nachrichten, die von IBM® MQdefiniert werden.

Mit den ersten drei Nachrichtentypen können sich Anwendungen gegenseitig Informationen übermitteln. Mithilfe des vierten Typs, der Berichtsnachricht, können Anwendungen und Warteschlangenmanager Informationen zu Ereignissen wie z. B. dem Auftreten eines Fehlers zurückmelden.

Jeder Nachrichtentyp ist mit einem MQMT_*-Wert gekennzeichnet. Sie können auch eigene Nachrichtentypen definieren. Informationen zum Wertebereich, den Sie verwenden können, finden Sie unter MsgType.

Datagramme

Verwenden Sie ein Datagramm, wenn Sie von der Anwendung, welche die Nachricht empfängt (die Nachricht also aus der Warteschlange abruft), keine Antwort benötigen.

Beispielsweise könnte eine Anwendung, die Fluginformationen in einer Flughafen-Lounge anzeigt, Datagramme verwenden. In einer Nachricht könnten die Daten für eine gesamte Bildschirmanzeige mit Fluginformationen enthalten sein. Eine solche Anwendung wird höchstwahrscheinlich keine Nachrichtenbestätigung anfordern, da es vermutlich keine Rolle spielt, wenn eine Nachricht nicht zugestellt wird. Nach kurzer Zeit sendet die Anwendung eine Aktualisierungsnachricht.

Anforderungsnachrichten

Verwenden Sie eine Anforderungsnachricht, wenn Sie von der Anwendung, welche die Nachricht empfängt, eine Antwort erhalten möchten.

Anforderungsnachrichten könnten beispielsweise von einer Anwendung verwendet werden, welche die Bilanz eines Girokontos anzeigt. In der Anforderungsnachricht könnte die Kontonummer angegeben sein, in der Antwortnachricht wäre der Kontostand enthalten.

Falls Sie die Antwortnachricht mit der Anforderungsnachricht verbinden möchten, stehen Ihnen hierfür zwei Möglichkeiten zur Verfügung:
  • Sie können es so einrichten, dass die Anwendung, welche die Anforderungsnachricht bearbeitet, Informationen in die Antwortnachricht stellen muss, die sich auf die Anforderungsnachricht beziehen.
  • Sie können im Nachrichtendeskriptor der Anforderungsnachricht im Berichtsfeld den Inhalt der Felder MsgId und CorrelId der Antwortnachricht angeben:
    • Sie können anfordern, dass entweder das Feld MsgId oder das Feld CorrelId der Originalnachricht in das Feld CorrelId der Antwortnachricht kopiert wird (standardmäßig wird das Feld MsgId kopiert).
    • Sie können anfordern, dass für die Antwortnachricht entweder ein neues Feld MsgId generiert wird oder dass das Feld MsgId der Originalnachricht in das Feld MsgId der Antwortnachricht kopiert wird (standardmäßig wird eine neue Nachrichten-ID generiert).

Antwortnachrichten

Verwenden Sie eine Antwortnachricht als Antwort auf eine andere Nachricht.

Beachten Sie beim Erstellen einer Antwortnachricht alle Optionen, die im Nachrichtendeskriptor der zu beantwortenden Nachricht definiert sind. Berichtsoptionen geben den Inhalt der Felder für die Nachrichten-ID (MsgId) und die Korrelations-ID (CorrelId) an. Anhand dieser Felder kann die Anwendung, welche die Antwort empfängt, die Antwort mit der ursprünglichen Anforderung korrelieren.

Berichtsnachrichten

Berichtsnachrichten informieren Anwendungen über Ereignisse wie z. B. das Auftreten eines Fehlers bei der Verarbeitung einer Nachricht.

Sie können von folgenden Komponenten generiert werden:
  • Warteschlangenmanager
  • Nachrichtenkanalagent (wenn die Nachricht beispielsweise nicht zugestellt werden kann) oder
  • Anwendung (wenn diese beispielsweise die Daten in der Nachricht nicht verwenden kann).

Berichtsnachrichten können jederzeit geniert werden und in einer Warteschlange eintreffen, wenn die Anwendung dies gar nicht erwartet.

Arten von Berichtsnachrichten
Wenn Sie eine Nachricht in eine Warteschlange stellen, können Sie angeben, dass Sie folgende Nachrichten empfangen möchten:
  • Eine Ausnahmeberichtsnachricht. Diese wird als Antwort auf eine Nachricht gesendet, für die das Ausnahme-Flag gesetzt ist. Sie wird vom Nachrichtenkanalagenten oder der Anwendung generiert.
  • Eine Ablaufberichtsnachricht. Diese gibt an, dass eine Anwendung versucht hat, eine Nachricht abzurufen, die bereits den Ablaufschwellenwert erreicht hatte. Die Nachricht ist zum Löschen markiert. Diese Art von Bericht wird vom Warteschlangenmanager generiert.
  • Eine Berichtsnachricht mit einer Bestätigung bei Eingang. Diese gibt an, dass die Nachricht ihre Zielwarteschlange erreicht hat. Sie wird vom Warteschlangenmanager generiert.
  • Eine Berichtsnachricht mit einer Empfangsbestätigung. Diese gibt an, dass die Nachricht von einer empfangenden Anwendung abgerufen wurde. Sie wird vom Warteschlangenmanager generiert.
  • Eine Berichtsnachricht mit einer Benachrichtigung über eine positive Aktion. Diese gibt an, dass eine Anforderung erfüllt (und somit die in der Nachricht angeforderte Aktion erfolgreich ausgeführt) wurde. Diese Art von Bericht wird von der Anwendung generiert.
  • Eine Berichtsnachricht mit einer Benachrichtigung über eine negative Aktion. Diese gibt an, dass eine Anforderung nicht erfüllt (und somit die in der Nachricht angeforderte Aktion nicht erfolgreich ausgeführt) wurde. Diese Art von Bericht wird von der Anwendung generiert.
Hinweis: Jeder Berichtsnachrichtentyp enthält eine der folgenden Angaben:
  • Die gesamte ursprüngliche Nachricht
  • Die ersten 100 Datenbytes der ursprünglichen Nachricht
  • Keine Daten aus der ursprünglichen Nachricht

Wenn Sie eine Nachricht in eine Warteschlange stellen, können Sie mehrere Arten von Berichtsnachrichten anfordern. Wenn Sie sich für die Berichtsnachricht mit dem Zustellnachweis und die Ausnahmeberichtsnachricht entscheiden, erhalten Sie eine Ausnahmeberichtsnachricht, wenn die Nachricht nicht zugestellt werden kann. Wenn Sie dagegen nur die Berichtsnachricht mit dem Zustellnachweis auswählen und die Nachricht nicht zugestellt werden kann, erhalten Sie keine Ausnahmeberichtsnachricht.

Sie erhalten nur die angeforderten Berichtsnachrichten, sofern die entsprechenden Kriterien für die Nachrichten erfüllt sind.

Berichtsnachrichtenoptionen

Nachdem eine Ausnahme aufgetreten ist, können Sie eine Nachricht löschen. Wenn Sie die Löschoption auswählen und eine Ausnahmeberichtsnachricht angefordert haben, wird die Berichtsnachricht an ReplyToQ und ReplyToQMgr übermittelt, während die ursprüngliche Nachricht gelöscht wird.

Hinweis: Ein Vorteil besteht darin, dass Sie die Anzahl der Nachrichten reduzieren können, die an die Warteschlange für nicht zustellbare Nachrichten gesendet werden. Allerdings muss Ihre Anwendung, sofern sie nicht nur Datagrammnachrichten sendet, zurückgegebene Nachrichten bearbeiten. Wenn eine Ausnahmeberichtsnachricht generiert wird, übernimmt sie die Persistenz der ursprünglichen Nachricht.

Kann eine Berichtsnachricht nicht zugestellt werden (weil beispielsweise die Warteschlange voll ist), wird sie in die Warteschlange für nicht zustellbare Nachrichten gestellt.

Wenn Sie eine Berichtsnachricht empfangen möchten, geben Sie den Namen der Empfangswarteschlange für Antworten im Feld ReplyToQ an. Andernfalls schlägt MQPUT oder MQPUT1 der Originalnachricht mit dem Fehler MQRC_MISSING_REPLY_TO_Q fehl.

Im Nachrichtendeskriptor (MQMD) einer Nachricht können Sie mithilfe anderer Berichtsoptionen angeben, welchen Inhalt die Felder MsgId und CorrelId in jeglichen Berichtsnachrichten haben sollen, die für diese Nachricht erstellt werden:
  • Sie können anfordern, dass entweder das Feld MsgId oder das Feld CorrelId der Originalnachricht in das Feld CorrelId der Berichtsnachricht kopiert werden soll. Standardmäßig wird die Nachrichten-ID kopiert. Verwenden Sie MQRO_COPY_MSG_ID_TO_CORRELID, da auf diese Weise der Absender einer Nachricht die Antwort oder Berichtsnachricht mit der ursprünglichen Nachricht korrelieren kann. Die Korrelations-ID der Antwort oder Berichtsnachricht ist mit der Nachrichten-ID der ursprünglichen Nachricht identisch.
  • Sie können anfordern, dass für die Berichtsnachricht entweder ein neues Feld MsgId generiert wird oder dass das Feld MsgId der Originalnachricht in das Feld MsgId der Berichtsnachricht kopiert wird. Standardmäßig wird eine neue Nachrichten-ID generiert. Verwenden Sie MQRO_NEW_MSG_ID, da auf diese Weise sichergestellt ist, dass jede Nachricht im System über eine andere Nachrichten-ID verfügt und eindeutig von allen anderen Nachrichten im System zu unterscheiden ist.
  • Fachanwendungen müssen unter Umständen MQRO_PASS_MSG_ID oder MQRO_PASS_CORREL_ID verwenden. Die Anwendung, welche die Nachrichten aus der Warteschlange liest, müssen Sie jedoch selbst entwickeln, um sicherzugehen, dass sie korrekt funktioniert, wenn die Warteschlange beispielsweise mehrere Nachrichten mit derselben Nachrichten-ID enthält.

    Serveranwendungen müssen die Einstellungen dieser Flags in der Anforderungsnachricht prüfen und die Felder MsgId und CorrelId in der Antwort oder der Berichtsnachricht entsprechend festlegen.

    Als Intermediäre zwischen einer anfordernden Anwendung und einer Serveranwendung fungierende Anwendungen müssen die Einstellungen dieser Flags nicht prüfen. Dies liegt daran, dass diese Anwendungen die Nachricht in der Regel mit unveränderten Feldern MsgId, CorrelId und Report an die Serveranwendung weiterleiten müssen. Somit kann die Serveranwendung das Feld MsgId aus der ursprünglichen Nachricht in das Feld CorrelId der Antwortnachricht kopieren.

Beim Generieren eines Berichts zu einer Nachricht müssen Serveranwendungen prüfen, ob diese Optionen gesetzt wurden.

Weitere Informationen zur Verwendung von Berichtsnachrichten finden Sie unter Bericht.

Mit einer Reihe von Rückkopplungscodes geben Warteschlangenmanager die Berichtsgattung an. Sie fügen diese Codes in das Feld Feedback des Nachrichtendeskriptors einer Berichtsnachricht ein. Zudem können Warteschlangenmanager auch MQI-Ursachencodes im Feld Feedback zurückgeben. IBM MQ definiert einen Bereich von Rückkopplungscodes, die von Anwendungen verwendet werden können.

Weitere Informationen zu Feedback und Ursachencodes finden Sie unter Feedback.

Rückkopplungscodes könnten beispielsweise von einem Programm verwendet werden, welches die Auslastung anderer Programme überwacht, die für eine Warteschlange zuständig sind. Ist mehr als eine Instanz eines Programms für eine Warteschlange zuständig und ist dies durch die Anzahl in der Warteschlange eintreffender Nachrichten nicht mehr gerechtfertigt, kann ein solches Programm eine Berichtsnachricht (mit dem Rückkopplungscode MQFB_QUIT) an eines der zuständigen Programme senden, um diesem mitzuteilen, dass es seine Aktivität beenden soll. (Ein Überwachungsprogramm könnte mit dem Aufruf MQINQ herausfinden, wie viele Programme für eine Warteschlange zuständig sind.)