Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 13505|Antwoord: 2

ActiveMQ persistent abonnementsinstellingen

[Link kopiëren]
Geplaatst op 09-01-2017 11:12:10 | | |

ActiveMQ persistent abonnementsinstellingen
Door de PERSISTENT-leveringsmodus voor de uitgever in te stellen, kun je persistente abonnementen gebruiken voor abonnees, wat garandeert dat het Pub/Sub-programma alle gepubliceerde berichten ontvangt.
Berichtabonnementen zijn onderverdeeld in niet-duurzame abonnementen en duurzame abonnementen, en niet-duurzame abonnementen kunnen alleen berichten ontvangen die naar een onderwerp worden gestuurd wanneer de client actief is, dat wil zeggen wanneer de client offline is; berichten die tijdens deze periode naar het onderwerp worden gestuurd, gaan verloren en worden nooit ontvangen. Wanneer de client offline is, slaat ActiveMQ alle berichten die naar het onderwerp zijn gestuurd op volgens zijn ID, en wanneer de client opnieuw verbinding maakt met ActiveMQ, ontvangt het alle berichten die naar het onderwerp zijn gestuurd wanneer het offline is. Persistente abonnementen verhogen de overhead en hebben telkens maar één actieve gebruiker in een persistent abonnement. Stappen om een persistent abonnement op te zetten:
1. Stel een klant-ID in voor de verbinding;
2. Specificeer een abonnementsnaam voor het onderwerp van het abonnement;
De bovenstaande combinatie moet uniek zijn.
Code implementeert persistente abonnementen

(1) Bij het gebruik van wachtrij, dat wil zeggen bij het wachtrijen, is er slechts één consument per bericht, dus persistentie is heel eenvoudig, sla het gewoon op in de database

。 Daarna kan elke consument het oppakken en weggooien. Het maakt niet uit of een consument het een tijdje uitzet.

(2) Bij het gebruik van topic, dat wil zeggen bij het abonneren, kan elk bericht meerdere consumenten hebben, wat problematischer is.

Ten eerste, ervan uitgaande dat consumenten gewone consumenten zijn,
------------------------
Na de lancering van <1> activemq werd News 1 uitgebracht, maar helaas beginnen er nu geen consumenten, dat wil zeggen, geen enkele consument heeft zich geabonneerd. Dus

, werd het nieuws verlaten.

<2> Consument 1 startte, verbond met activemq, abonneerde zich en wachtte op een bericht~~

activemq plaatst bericht 2, OK, consument 1 ontvangt het en verwerkt het. Bericht verlaten.

<3> Consumer 2 is ook gelanceerd, verbonden met activemq, geabonneerd en wacht op een bericht~~

activemq publiceert bericht 3, OK, consument 1, consument 2 worden allemaal ontvangen en verwerkt. Bericht verlaten.

<4> Consument 1 is uitgeschakeld.

activemq plaatst bericht 4, OK, consument 2 ontvangt en verwerkt het. Bericht verlaten.

<5> Consument 1 startte opnieuw.

activemq publiceert berichten 5, OK, consument 1 en consument 2 ontvangen en verwerken ze allemaal. Bericht verlaten.
-----------------------------
Samengevat:
ActiveMQ stuurt simpelweg berichten naar de momenteel gelanceerde consument.
Consumenten die uitschakelen, missen veel berichten en kunnen ze niet meer ontvangen.

Als het verzonden bericht belangrijke gebruikerssynchronisatiegegevens is en deze mist, wordt de gebruikersgegevens niet gesynchroniseerd.

Dus, hoe zorg je ervoor dat consumenten gemiste berichten ontvangen wanneer ze opnieuw opstarten?

Het antwoord is een persistent abonnement.
-----------------------------

Gewone abonnementen, zonder onderscheid te maken tussen consumenten, als er een paar hoofden in de zaal zijn, gooien een paar gestoomde broodjes.
Voor blijvende abonnementen moet je de naam van de consument registreren.
Zhang San zei: Ik ben Zhang San, er zijn gestoomde broodjes voor mij, ik kom ze halen.
Li Si zei: Ik ben Li Si, er zijn gestoomde broodjes voor mij, ik kom ze halen.
activemq schreef de namen van Zhang San en Li Si op.

Dan geeft bij het verdelen van gestoomde broodjes één kop nog steeds een gestoomde broodje.
Na de scheiding, toen hij zag dat Zhang San niet sprak, betekende dat dat hij er niet was, dus laat hem maar een gang.
Li Si sprak, dus er was geen reden om te blijven.

Zhang San kwam terug, zocht activemq en keek, dit is niet Zhang San, breng snel zijn gestoomde broodjes.
Het kan één gestoomd broodje zijn, of 100 gestoomde broodjes, het hangt ervan af hoeveel gestoomde broodjes Zhang San heeft verdeeld sinds hij een tijdje weg was.

activemq onderscheidt consumenten op basis van clientID en abonneenaam.
-----------------------------
Maak een verbinding
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); Persistente abonnementen vereisen dat je dit instelt.
connection.start();

Maak een sessie aan
Sessiesessie = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Creëer een bestemming
Onderwerp = sessie.createTopic("userSyncTopic"); Onderwerpnaam

MessageConsumer consumer = session.createConsumer(topic); Reguliere abonnementen
MessageConsumer consument = session.createDurableSubscriber(topic,"bbb"); Persistente abonnementen


Een ander punt is dat de producent van het bericht persistent modus gebruikt bij het verzenden van berichten
MessageProducer producer = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Zo niet, dan is het standaard persistent

(5) Als dezelfde "clientID" wordt gebruikt, wordt het beschouwd als dezelfde consument. Als twee programma's dezelfde "clientID" gebruiken, kan er maar één tegelijk verbinding maken met activemq, en de tweede verbinding zal een foutmelding geven.

(6) De instellingen van activemq staan in conf/activemq.xml, en de standaardberichten worden opgeslagen in data/kahadb, en de berichten gaan niet verloren bij het herstarten van activemq.

Je kunt toegang krijgen tot http://localhost:8161/admin/index.jsp: informatie bekijken over huidige wachtrijen, onderwerpen en blijvende abonnees, berichten verzenden en meer.

Je kunt de inhoud in de activemq-jdbc.xml kopiëren en aanpassen, en je kunt het bericht opslaan in andere databases.




Vorig:360-ticket voor het winnen van het vijfde generatie VIP-kanaal is gekraken, snel de VIP-rij binnenrijden
Volgend:. .Net-platform
 Huisbaas| Geplaatst op 09-01-2017 13:41:53 |
1 Vergelijking van technische kenmerken van wachtrij en onderwerp
naam
Onderwerp
Wachtrij
Overzicht
Publiceren Abonneer je berichten Publiceer abonnementsberichten
Punt-tot-punt Punt-tot-Punt
Er is geen staat
Topicdata is standaard stateless.
Wachtrijgegevens worden standaard als bestand opgeslagen op de MQ-server, bijvoorbeeld, Active MQ wordt meestal opgeslagen onder $AMQ_HOME\data\kr-store\data. Het kan ook worden geconfigureerd als een database-opslag.
Integriteitsgarantie
Er is geen garantie dat elk stuk gegevens dat door de uitgever wordt gepubliceerd, door de abonnee wordt geaccepteerd.
Queue garandeert dat elk stuk data door de ontvanger kan worden ontvangen.
of de boodschap verloren zal gaan
Over het algemeen geldt, wanneer een uitgever een bericht publiceert over een onderwerp, alleen de sub die naar het onderwerp luistert het bericht ontvangen. Als er geen sub luistert, gaat het onderwerp verloren.
De afzender stuurt een bericht naar de doelwachtrij, en de ontvanger kan berichten asynchroon ontvangen op deze wachtrij. Berichten in de wachtrij gaan niet verloren als er voorlopig geen ontvanger is om ze op te nemen.
Beleid voor ontvangst van berichten
One-to-many berichtpublicatie- en ontvangstbeleid: meerdere subs die hetzelfde onderwerpadres horen, kunnen berichten ontvangen die door de uitgever zijn gestuurd. De sub ontvangt de melding naar de mq-server
Beleidsregels voor het publiceren en ontvangen van één-op-één berichten, berichten die door een afzender worden verzonden, kunnen slechts door één ontvanger worden ontvangen. Nadat de ontvanger ontvangt, laat de MQ-server de MQ-server weten dat hij is ontvangen, en verwijdert de MQ-server of voert andere acties uit op de berichten in de wachtrij.

 Huisbaas| Geplaatst op 09-01-2017 13:42:15 |
Het grootste verschil tussen topic en queue is dat topic in de vorm van broadcasting is, waarbij alle online luisterclients worden geïnformeerd dat er een nieuw bericht is, en de client zonder monitoring het bericht niet ontvangt; Queue daarentegen waarschuwt een van meerdere luisterende clients via peer-to-peer manier.

2 Vergelijking van de efficiëntie van berichtverwerking tussen onderwerp- en wachtrijmethoden
        Door het aantal gelijktijdigheid van de luisterclient te verhogen, verifieer je of de berichtpush van het onderwerp aanzienlijk zal afnemen door de toename van gelijktijdigheid van de luisterclient.
        Uit de gemeten resultaten blijkt dat er geen significant verschil is in de efficiëntie van het verzenden en ontvangen van berichten die via de topic-methode worden verzonden onder de premisse van één abonnee en 100 abonnees, maar onder de premisse van 500 abonnees (threads) gelijktijdigheid is het efficiëntieverschil duidelijk (door de gelijktijdigheid van 500 threads is het CPU-gebruik van mijn machine zo hoog als 70-90%, dus het is onmogelijk te bevestigen of het een prestatiebottleneck is veroorzaakt door mijn lokale test of een prestatiebottleneck in de topic-bericht verzendmethode, wat resulteert in zo'n aanzienlijke vermindering van de efficiëntie).
        Er is geen significant verschil in de efficiëntie van het verzenden en ontvangen van berichten die via onderwerpmethode en wachtrijmodus worden verzonden onder de premisse van één abonnee en 100 abonnees, maar onder de premisse van 500 abonnees gelijktijdigheid is de efficiëntie van onderwerpmodus aanzienlijk lager dan die van wachtrij.
        De efficiëntie van het verzenden en ontvangen van berichten die in de wachtrijmethode worden verzonden, verandert niet significant onder het uitgangspunt van één abonnee, 100 abonnees en 500 abonnees.
Onderwerpgemeten gegevens:


Het totale aantal berichten dat door de afzender wordt verzonden
Het totale aantal ontvangen berichten door alle abonnees
De gemiddelde tijd die het kost om berichten te verzenden en te ontvangen
Enkele abonnee
100
100
101ms
100 abonnees
100
10000
103ms
500 abonnees
100
50000
14162ms

Queue-gemeten gegevens:


Het totale aantal berichten dat door de afzender wordt verzonden
Het totale aantal ontvangen berichten door alle abonnees
De gemiddelde tijd die het kost om berichten te verzenden en te ontvangen
Enkele abonnee
100
100
96ms
100 abonnees
100
100
96ms
500 abonnees
100
100
100ms

Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com