WebSphere MQ MessageListener (Ähnlich wie JMS Message Listener)
Habe ich die MQConsumerClass abrufen der Nachrichten aus der Warteschlange wie folgt.
while (running)
{
try
{
MQMessage rcvMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_WAIT;
gmo.waitInterval = 60000;
queue.get(rcvMessage, gmo);
if(rcvMessage.getTotalMessageLength() > 0)
{
String msgText = rcvMessage.readUTF();
}
}
catch blocks{}
}
Aber das problem ist, wenn es keine Nachricht in der queue, die 2033 Ausnahme geworfen wird.
Ich denke 2033 NO_MSG_AVAILABLE Ausnahme ist NICHT ernst Ausnahme, wahrscheinlich können Sie den Vorgang beenden.
Jedoch möchte ich nennen onMessage(Message msg)
Funktion, sobald eine neue message in der queue.
Möchte ich diese Klasse erstellt mit MessageListener aber ich kann nicht finden, MessageListener oder irgendein Beispiel, die damit verbunden sind.
So, bitte sagen Sie mir, wenn es irgendeine MessageListener-Funktion in ein Fehler in WMQ Java-API.
oder
irgendeiner Weise, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ein Fehler in WMQ Java-API nicht eine message listener. Ähnlich
onMessage
von JMS ist nicht da, nur die synchrone erhalten.Den 2033 'Fehler' ist nicht wirklich ein Fehler, es ist mehr eine MQSeries Rückkehr status: MQRC_NO_MSG_AVAILABLE 2033 Die MQTester Programm ist polling eine Warteschlange auf der Suche nach einer Nachricht, aber es sind keine Nachrichten vorhanden.
Können Sie ausschließen, es mit
Können Sie nicht vollständig vermeiden, dass diese 2033 "keine Meldung" exceptions in dieser Art von Schleife. Durch die Erhöhung des warte-Intervall, es gibt nur wenige Nachteile (außer vielleicht langsamer Anwendung closedown, wenn Sie fertig sind) und verringern Sie die chance, zu scheitern, zu bekommen, eine Nachricht für jeden get-Aufruf. So zum Beispiel, wenn Sie geben Sie eine Wartezeit von 5 Minuten-Intervall, so lange, wie mindestens eine Nachricht in der Warteschlange alle 5 Minuten, dann alle get-Aufruf wird eine Meldung angezeigt (in der Regel). Aber Sie müssen noch einen catch-block für die Art von Ausnahme, als Sie sollten erwarten, manchmal nicht finden, eine Nachricht in Ihrem warte-Intervall. So lange wie Ihr warten-Intervall nicht zu kurz, die performance-Einbuße, die fehlgeschlagen get, catch-block und Spinnen in der Schleife, sollte relativ gering sein.
Wenn Sie wirklich wollen, um ein asynchroner Verbraucher, wo Ihre Anwendung wird aufgerufen, wenn eine Nachricht verfügbar ist, dann werden die WebSphere MQ-Klassen für JMS ist die Java-API-wo finden Sie die MessageListener-Schnittstelle. WebSphere MQ stellt 2 unterschiedliche APIs für Java. Ihr code-snippet wird mithilfe von WebSphere MQ classes for Java, eher als JMS.
Können Sie MQConstants.MQWI_UNLIMITED angeben ulimited warten-Intervall.
}