Referenz-Blogbeitrag: http://www.cnblogs.com/SzeCheng/p/4792084.html
Referenz-Blogbeitrag: http://activemq.apache.org/producer-flow-control. html
Begriffserklärung:
P: Producer
C: Consumer
Server: P oder ActiveMQ-Dienst
Client: ActiveMQ Dienst oder C
Das Zeichen dafür, dass der Client eine Nachricht erfolgreich empfängt, ist, dass die Nachricht signiert wurde. Der erfolgreiche Empfang einer Nachricht umfasst im Allgemeinen die folgenden drei Phasen:
1. Der Kunde erhält die Nachricht;
2. Der Client verarbeitet die Nachricht;
3. Die Nachricht ist signiert.
session = connection.createSession(Boolean.false, Session.CLIENT_ACKNOWLEDGE);##第一个参数控制事务,第二个参数控制消息
In einer Sitzung ohne Transaktionen hängt es von den Sitzungseinstellungen ab, wann und wie eine Nachricht signiert wird.
1. Session.AUTO_ACKNOWLEDGE
Wenn der Client erfolgreich von „receive“ oder „onMessage“ zurückkehrt, signiert Session automatisch den Empfang dieser Nachricht durch den Client.
2. Session.CLIENT_ACKNOWLEDGE
Der Client signiert die Nachricht, indem er die Bestätigungsmethode der Nachricht aufruft.
message.acknowledge();
In einer Sitzung mit einer Transaktion erfolgt die Signatur automatisch, wenn die Transaktion übermittelt wird. Wenn die Transaktion zurückgesetzt wird, werden alle empfangenen Nachrichten erneut zugestellt. Tatsächlich ist Session.CLIENT_ACKNOWLEDGE hier von geringem Nutzen.
session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
session.commit();
Zusammenfassung:
1 Für den Produzenten: Der Server ist P und der Client ist der ActiveMQ-Dienst. Die Sitzung ist auf AUTO_ACKNOWLEDGE und CLIENT_ACKNOWLEDGE eingestellt. Relativ gesehen ist der Unterschied nicht sehr groß.
2. Für Verbraucher: Der Server ist ActiveMQ und der Client ist C. Die Sitzung wird auf AUTO_ACKNOWLEDGE gesetzt. Wenn eine Nachricht empfangen wird (receive oder onMessage erfolgreich zurückgegeben), ist der Verbrauch erfolgreich und die Daten werden aus der Warteschlange entfernt. Es ist uns egal, ob die Daten korrekt zu den gewünschten Ergebnissen verarbeitet werden; wenn die Sitzung auf CLIENT_ACKNOWLEDGE gesetzt ist, muss die Bestätigungsmethode für eine erfolgreiche Nutzung manuell aufgerufen werden, und dann werden die Daten aus der Warteschlange entfernt.
3. In welchem Modus die Sitzungen von P und C keinen Einfluss aufeinander haben.