PDA

View Full Version : Message Handling



dirkus
15-03-07, 09:47
Im System werden Nachrichten doch über Message-Keys (4B) identifiziert. Meine Frage ist:

Wenn eine Nachricht gelöscht wurde, wann wird der Message-Key frühestens wiederverwendet?

Fuerchau
15-03-07, 09:56
Wahrscheinlich gar nicht.
Immerhin gibt es da 2^32-2 Möglichkeiten (BLANK ist ja nicht möglich).

Wozu ist es gut zu wissen ?

dirkus
15-03-07, 10:25
Ich möchte ein Programm schreiben, dass die Message-Queue QSYSOPR überwacht, und beim Auftreten von bestimmten Message-IDs oder bei Nachrichten, die eine bestimmte Severity überschreiten eine Mail bzw. SMS verschickt (Fehler beim Plattenadapter, o. Ä.).

Hab das Programm mit dem API QMHRCVM soweit schon fertig. Das API liefert die Nachrichten die in einer Message-Queue stehen. Man kann alle Nachrichten empfangen, die noch nicht gelesen wurden, das wäre das einfachste. Dafür müßte man die Nachrichten, die bereits abgerufen wurden auf *OLD setzen. Das will ich aber nicht, da evtl. noch andere Prozesse die Nachrichten lesen.

Also muss ich mir die Message-Keys merken, die ich bereits empfangen habe... Wenn die aber relativ bald wiederverwendet werden, kann es sein, dass ich eine "neue" Nachricht ignoriere.

kuempi von stein
15-03-07, 11:02
Hello,

wenn Du das Format RCVM0200 verwendest, könntest Du ja auch nocht die Zeitfelder mit in Deine Überlegung reinnehmen?
Selbst wenn die Nummer überläuft, ist doch die Sendtime eine andere?

kuempi

Pikachu
15-03-07, 11:36
Wie überwachst du die Nachrichtenwarteschlange? Siehst du immer mal wieder nach und liest alle Nachrichten? Oder wartet (http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/apis/XBREAK.htm) dein Programm auf neue Nachrichten in dieser Warteschlange?

Fuerchau
15-03-07, 11:55
Innerhalb einer MSGQ kann kein MSGKEY doppelt auftreten.
Da der RCVMSG (analog das API) relativ zum MSGKEY die nächste Nachricht abrufen kann, muss der Schlüssel ja eindeutig sein.
Du hast nur dann verloren, wenn die Nachricht zwischenzeitlich entfernt wurde.

Ich habe auch schon solche Nachrichtenüberwachungen realisiert und habe mir die MSGKEY's gar nicht gemerkt (da sie gelöscht werden können) sondern bin tatsächlich nach Datum Uhrzeit gegangen. Dabei habe ich die letzten Nachrichten zuerst verarbeitet.

dirkus
15-03-07, 12:26
@kuempi von stein:
ja, ich habe es jetzt über Timestamp + MSG-Key aus RCVM0200 realisiert. Die Nachrichten vom Vortag werden beim Programmstart aus der Protokolldatei gelöscht und beim RCV ignoriert.

@Pikachu:
Das API bietet zwar einen WAIT-Parameter, allerdings wird die MSGQ während dem Warten gesperrt, so dass keine Nachrichten gelöscht oder beantwortet werden können. Das Programm prüft die MSGQ einfach alle 10 Sekunden.