Es gibt eine Gruppe von Prüfungen, die Sie ausführen können, um festzustellen, warum Publish/Subscribe-Nachrichten
nicht von einer Subskription in einem Service Integration Bus empfangen werden, wenn die Nachrichten
über einen fernen Nachrichtenpunkt weitergeleitet werden.
Informationen zu diesem Vorgang
Führen Sie diese Task im Rahmen der Task
Feststellen, warum Publish/Subscribe-Nachrichten nicht bei der Subskription ankommen aus.
Diese Task erläutert, wie Sie den Nachrichtenfluss in einem Publish/Subscribe-Messaging-Szenario
untersuchen können, in dem Nachrichten über einen fernen Nachrichtenpunkt an eine nicht permanente Subskription weitergeleitet werden.
Die folgenden Abbildungen veranschaulichen zwei mögliche Situationen.
Die gepunkteten Linien in den Abbildungen stehen für die Beziehungen zwischen den
Veröffentlichungspunkten, die durchgezogenen Linien zeigen den Nachrichtenfluss an.
In Abbildung 1 enthält ein Bus drei Messaging-Engines: ME1, ME2 und ME3. Die
veröffentlichende Anwendung ist mit ME1 verbunden und subskribierende Anwendungen mit ME2 und ME3.
ME1 enthält ferne Veröffentlichungspunkte, die die Veröffentlichungspunkte in ME2 und ME3 darstellen.
In Abbildung 2 enthält ein Bus drei Messaging-Engines: ME1, ME2 und ME3. Die
veröffentlichende Anwendung ist mit ME1 verbunden, und die subskribierenden Anwendungen mit ME2 und ME3.
ME1 enthält ferne Veröffentlichungspunkte, die die Veröffentlichungspunkte in ME2 und ME3 darstellen.
Die subskribierende Anwendung B ist mit ME3 verbunden und empfängt über eine ferne Subskription in ME2 Veröffentlichungen von ME1.
Auf die Messaging-Engines wird in den folgenden Schritten verwiesen.
Abbildung 1. Erzeugen von Punkt-zu-Punkt-Nachrichten mit einem fernen Nachrichtenpunkt
Abbildung 2. Publish/Subscribe-Messaging mit einem fernen Nachrichtenpunkt
Die folgenden Schritte gelten für beide
Szenarien.
Vorgehensweise
- Zeigen Sie die Eigenschaften für ME1 an, indem Sie auf klicken.
- Klicken Sie auf der Registerkarte Laufzeit für ME1 auf [Ferne
Nachrichtenpunkte] Ferne Veröffentlichungspunkte und anschließend auf den fernen Veröffentlichungspunkt, der den Veröffentlichungspunkt in
ME2 darstellt. Klicken Sie auf Topics und vergewissern Sie sich, dass
das Topic des Konsumenten aufgelistet ist. Falls das Topic nicht aufgelistet ist, führen Sie die folgenden Prüfungen durch:
- Es ist möglich, dass die Registrierung der Subskription erst nach der Veröffentlichung der Nachricht vorgenommen wurde.
Veröffentlichen Sie die Nachricht erneut und prüfen Sie anschließend, ob die Nachricht empfangen wurde.
- Zeigen Sie in ME1 erneut den fernen Veröffentlichungspunkt an, der den Veröffentlichungspunkt in ME2 darstellt.
Überprüfen Sie den Wert im Feld Aktuelle abgehende Nachrichten.
- Wenn die aktuelle Anzahl abgehender Nachrichten größer als null ist, wurden Nachrichten erzeugt, aber von ME2 möglicherweise
nicht empfangen.
- Vergewissern Sie sich, dass die beiden Messaging-Engines
miteinander kommunizieren können. Lesen Sie hierzu den Artikel Fehlerbehebung bei der Serviceintegration: Kommunikation zwischen zwei Messaging-Engines in einem Bus überprüfen.
- Suchen Sie nach älteren Nachrichten im Topicbereich. Sollten ältere Nachrichten vorhanden und einige oder alle
für ME2 bestimmt sein, warten Sie einige Augenblicke und aktualisieren Sie dann die Ansicht.
- Wenn einige der Nachrichten nicht mehr im Topicbereich enthalten sind, stellt das System
derzeit Nachrichten zu, befindet sich aber mit der Zustellung im Rückstand.
Warten Sie, bis das System den Rückstand aufgeholt hat, und untersuchen Sie dann den Veröffentlichungspunkt in
ME2, um festzustellen, ob die Testnachricht angekommen ist.
- Wenn noch alle Nachrichten im Topicbereich enthalten sind,
wird die Übertragung der Nachrichten möglicherweise durch eine Nachricht im Status "Festschreiben" blockiert.
Später gesendete Nachrichten müssen warten, bis diese Nachricht zugestellt ist, andernfalls gerät die Nachrichtenreihenfolge durcheinander.
Wenn eine Nachricht im Status "Festschreiben" gefangen ist, ist diese Nachricht in einer unaufgelösten
Transaktion enthalten.
Unter Umständen ist ein Ressourcenmanager, z. B. eine Datenbank, blockiert. Beheben Sie den Fehler im Ressourcenmanager.
Sollte dieser Versuch fehlschlagen, notieren Sie die Transaktions-ID der Nachricht, und klicken Sie auf
, um die allgemeinen Eigenschaften
für den Transaktionsservice anzuzeigen.
Verwenden Sie die Links Überprüfen, um die Transaktion aufzulösen, deren
globale ID mit der Transaktions-ID der Nachricht übereinstimmt.
- Überprüfen Sie den Status der Testnachricht:
- Wenn die Testnachricht den Status "Senden anstehend" hat, wartet die Nachricht darauf, versendet zu werden.
Möglicherweise akzeptiert ME2 derzeit keine Nachrichten. Führen Sie die folgenden Prüfungen durch:
- Vergewissern Sie sich, dass die beiden Messaging-Engines
miteinander kommunizieren können. Lesen Sie hierzu den Artikel Fehlerbehebung bei der Serviceintegration: Kommunikation zwischen zwei Messaging-Engines in einem Bus überprüfen.
- Prüfen Sie, ob der Veröffentlichungspunkt in ME2 voll ist: Zeigen Sie die Laufzeiteigenschaften
für den Veröffentlichungspunkt an und vergleichen Sie den Wert im Feld Aktuelle Nachrichtenanzahl mit dem
Wert im Feld Oberer Schwellenwert für Nachrichten. Falls die aktuelle Nachrichtenanzahl
gleich dem oberen Schwellenwert für Nachrichten ist, akzeptiert die Messaging-Engine so lange keine neuen
Nachrichten, bis die Nachrichten in der Warteschlange konsumiert sind.
Sie können den Konsumenten erneut starten und warten, bis der Rückstand aufgeholt ist, oder die Nachrichten löschen.
- Vergewissern Sie sich, dass die Konfigurationsänderungen weitergegeben wurden.
Stellen Sie sicher, dass ME2 über die Existenz des Veröffentlichungspunkts Kenntnis erhält, indem Sie die aktuellen Konfigurationseinstellungen im Anwendungsserver
von ME2 implementierten.
- Wenn die Testnachricht den Status "Bestätigung anstehend" hat, wurde die Nachricht zwar gesendet, aber
ME2 hat die Nachricht entweder noch nicht empfangen oder noch nicht verarbeitet.
Stellen Sie sicher, dass in der Übertragungswarteschlange keine Nachrichten im Status "Festschreiben" vor der
Testnachricht enthalten sind. Warten Sie dann einen Moment und untersuchen Sie den Veröffentlichungspunkt erneut, um festzustellen, ob die
Testnachricht angekommen ist. Sollten Nachrichten im Status "Festschreiben" gefangen sein, ziehen Sie zur Fehlerbehebung den
folgenden Punkt heran.
- Wenn die Testnachricht (oder eine andere Nachricht) den Status "Festschreiben" hat, ist die Nachricht in einer unaufgelösten
Transaktion enthalten.
Unter Umständen ist ein Ressourcenmanager, z. B. eine Datenbank, blockiert. Beheben Sie den Fehler im Ressourcenmanager.
Sollte dieser Versuch fehlschlagen, notieren Sie die Transaktions-ID der Nachricht, und klicken Sie auf
, um die allgemeinen Eigenschaften
für den Transaktionsservice anzuzeigen.
Verwenden Sie die Links Überprüfen, um die Transaktion aufzulösen, deren
globale ID mit der Transaktions-ID der Nachricht übereinstimmt.
- Wenn die Anzahl abgeschlossener abgehender Nachrichten größer ist als null, wurden Nachrichten von ME2
erzeugt und verarbeitet, aber die Testnachricht ist nicht angekommen.
Führen Sie die erzeugende Anwendung erneut aus und stellen Sie sicher, dass sich die Anzahl
abgeschlossener abgehender Nachrichten in ME1 erhöht (der Zähler für aktive abgehende Nachrichten kann sich vor dem
Zähler für abgeschlossene abgehende Nachrichten erhöhen).
- Sollte sich an den Zählerwerten nichts ändern, wurde die Nachricht in ME1 nicht erzeugt. Vergewissern Sie sich,
dass die erzeugende Anwendung mit der Messaging-Engine verbunden ist.
(Informationen hierzu finden Sie im Artikel Die Messaging-Engine bestimmen, mit der eine Anwendung verbunden ist).
- Wenn sich die Zähler erhöhen, ist die Nachricht in ME2 angekommen, wurde aber entweder konsumiert, an das
Ausnahmeziel gesendet oder sie ist verfallen.
Stellen Sie fest, ob Konsumenten vorhanden sind, und führen Sie die vorläufigen Tests erneut aus.
- Wenn die Anzahl der aktuellen und abgeschlossenen Nachrichten gleich null ist,
prüfen Sie, ob die erzeugende Anwendung Nachrichten für dieses Ziel erzeugt, indem Sie die vorläufigen Tests erneut ausführen.
- Sie haben jetzt den Nachrichtenfluss zwischen ME1 und ME2 überprüft.
Wenn Sie eine Anwendung haben, die mit der subskribierenden Anwendung A oder B in Abbildung 1 vergleichbar ist,
ist die Untersuchung abgeschlossen. Sollten weiterhin Probleme auftreten, wenden Sie sich an einen zuständigen IBM Servicemitarbeiter.
Wenn Sie eine Anwendung haben, die mit der subskribierenden Anwendung B in Abbildung 2 vergleichbar ist,
d. h. eine Anwendung mit einer fernen Subskription, müssen Sie auch den Nachrichtenfluss zwischen
ME2 und ME3 untersuchen. Führen Sie dazu die folgenden Schritte aus.
Um festzustellen, ob Ihre Anwendung eine ferne Subskription verwendet, zeigen Sie die Veröffentlichungspunkte
für den relevanten Topicbereich an. Suchen Sie Ihre Subskription und überprüfen Sie den Namen des Veröffentlichungspunkts.
Der Name hat das Format Name_des_Topicbereichs@Name_der_Messaging-Engine.
Damit erhalten Sie den Namen der Messaging-Engine, die Ihre Subskription enthält. Falls
diese Messaging-Engine nicht die Messaging-Engine ist, mit der die erzeugende Anwendung
verbunden ist, und auch nicht die, mit der die konsumierende Anwendung verbunden ist, wird eine ferne Subskription verwendet.
- Zeigen Sie die Subskriptionen für den Veröffentlichungspunkt in ME2 an und suchen Sie in dieser Liste Ihre
Subskription. Falls die Subskription nicht aufgelistet ist, führen Sie die folgenden Prüfungen durch:
- Klicken Sie auf Ihre Subskription und anschließend auf Bekannte ferne
Subskriptionspunkte. Klicken Sie in der daraufhin angezeigten Liste auf den Namen der
Messaging-Engine, die in der Abbildung durch ME3 dargestellt wird. Klicken Sie auf
Nachrichtenanforderungen. Daraufhin werden die Anforderungen angezeigt, die
von der Subskription in ME2 von der fernen Subskription in ME3 empfangen wurden.
- Starten Sie, sofern möglich, die konsumierende Anwendung und stellen Sie sicher,
dass sie aktiv versucht, eine Nachricht zu konsumieren (die Anwendung muss den Status "Empfang mit Wartezeit"
oder "Asynchroner Konsument registriert" haben), und führen Sie dann die Anweisungen im Artikel
Feststellen, warum Nachrichten über einen fernen Nachrichten- oder Subskriptionspunkt nicht konsumiert werden, wenn die Anwendung gestartet ist aus.
Wenn Ihre Anwendung nicht in der Lage ist, über einen längeren Zeitraum hinweg (lange genug, um das Problem zu untersuchen) Nachrichten aktiv zu konsumieren,
führen Sie die im Artikel Feststellen, warum Nachrichten über einen fernen Nachrichten- oder Subskriptionspunkt nicht konsumiert werden, wenn die Anwendung gestoppt ist
beschriebenen Schritte aus.