Nach dem Lesen eines Dokuments von JMS, ich völlig verwirrt durch die Phrase synchronous
und asynchronouns
.Wie versteht man das "synchrone" und "asynchrone" Messaging in JMS?
Sehen Sie diese Seite: http://docs.oracle.com/cd/E19798-01/821-1841/bncdq/index.html
Synchrone
Sie die Methode erhalten verwenden synchron eine Nachricht zu konsumieren. Sie können diese Methode jederzeit verwenden, nachdem Sie die Start-Methode aufrufen:
connection.start(); Message m = consumer.receive(); connection.start(); Message m = consumer.receive(1000); // time out after a second
Um eine Nachricht asynchron zu verbrauchen, verwenden Sie eine Nachricht Hörer, im nächsten Abschnitt beschrieben.
Asynchronous
JMS Nachricht Hörer Eine Nachricht Hörer ist ein Objekt, das für Nachrichten als asynchrones Event-Handler fungiert. Dieses Objekt implementiert die MessageListener-Schnittstelle, die eine Methode onMessage enthält. In der onMessage-Methode definieren Sie die Aktionen, die beim Eintreffen einer Nachricht ausgeführt werden sollen.
Sie registrieren den Nachrichten-Listener mit einem bestimmten MessageConsumer, indem Sie die setMessageListener-Methode verwenden. Zum Beispiel, wenn Sie eine Klasse mit dem Namen Listener definieren, die die Message-Schnittstelle implementiert, können Sie die Nachrichten-Listener registrieren, wie folgt:
Listener myListener = new Listener(); consumer.setMessageListener(myListener);
Ich habe zwei Fragen:
Als das, was ich verstanden , die Art von JMS ist asynchron. Producer veröffentlicht Nachrichten an die Warteschlange/das Thema, es muss nicht auf den Consumer warten. Dies ist asynchrones Verhalten. Wie kann es "synchron" sein?
Wenn der "MessageListener" asynchron ist, aber in meinem Test mit Spring-Jms, fand ich es immer in einem Thread ausgeführt. Das heißt, wenn ich
Thread.sleep(2000)
inonMessage
schreibe, muss es 2 Sekunden warten, bevor die nächste Nachricht verarbeitet wird. Ist es "asynchron"?
Danke für die "pull" und "push" Erklärung! – Freewind