Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 13505|Svare: 2

ActiveMQ persistent abonnementsinnstillinger

[Kopier lenke]
Publisert på 09.01.2017 11:12:10 | | |

ActiveMQ persistent abonnementsinnstillinger
Ved å sette PERSISTENT leveringsmodus for utgiveren, kan du bruke persistente abonnementer for abonnenter, noe som garanterer at Pub/Sub-programmet mottar alle publiserte meldinger.
Meldingsabonnementer deles inn i ikke-varige og varige abonnementer, og ikke-varige abonnementer kan kun motta meldinger sendt til et emne når klienten er aktiv, det vil si når klienten er offline, meldinger sendt til emnet i denne perioden vil gå tapt og aldri mottas. Når klienten er offline, lagrer ActiveMQ alle meldinger sendt til subjektet i henhold til sin ID, og når klienten kobler til ActiveMQ igjen, vil den motta alle meldingene sendt til subjektet når den er offline. Vedvarende abonnementer øker overhead og har kun én aktiv bruker i et vedvarende abonnement om gangen. Trinn for å etablere et vedvarende abonnement:
1. Sette opp en kunde-ID for tilkoblingen;
2. Spesifiser et abonnementsnavn for temaet for abonnementet;
Kombinasjonen ovenfor må være unik.
Kode implementerer vedvarende abonnementer

(1) Når man bruker kø, altså når man køer, er det bare én forbruker per melding, så persistens er veldig enkelt, bare lagre det i databasen

。 Deretter kan enhver forbruker plukke den opp og kvitte seg med den. Det spiller ingen rolle om en forbruker slår den av en stund.

(2) Når man bruker topic, altså ved abonnement, kan hver melding ha flere brukere, noe som er mer problematisk.

For det første, forutsatt at forbrukerne er vanlige forbrukere,
------------------------
Etter lanseringen av <1> activemq ble lansert, news 1 ble lansert, men dessverre starter det ingen forbrukere nå, det vil si at ingen forbrukere har abonnert. Så

, ble nyheten forlatt.

<2> Forbruker 1 startet, koblet til activemq, abonnerte og ventet på en melding~~

activmq legger ut melding 2, OK, forbruker 1 mottar, og behandler den. Melding forlatt.

<3> Consumer 2 er også lansert, koblet til activemq, abonnert, og venter på en melding~~

activemq publiserer melding 3, OK, forbruker 1, forbruker 2 blir alle mottatt og behandlet. Melding forlatt.

<4> Forbruker 1 er slått av.

activemq legger ut melding 4, OK, forbruker 2 mottar, og behandler den. Melding forlatt.

<5> Forbruker 1 startet på nytt.

actmq publiserer meldinger 5, OK, forbruker 1 og forbruker 2 mottar og behandler dem alle. Melding forlatt.
-----------------------------
For å oppsummere:
ActiveMQ sender ganske enkelt meldinger til den nåværende tilgjengelige forbrukeren.
Forbrukere som slår av, vil gå glipp av mange meldinger og vil ikke kunne motta dem igjen.

Hvis meldingen som sendes er viktig brukersynkroniseringsdata og bommer på den, er brukerdataene ikke synkronisert.

Så, hvordan får du forbrukere til å motta tapte meldinger når de starter på nytt?

Svaret er et vedvarende abonnement.
-----------------------------

Vanlige abonnementer, uten å skille mellom forbrukere, hvis det er noen få hoder i lokalet, kaster noen dampede boller.
For vedvarende abonnementer må du registrere navnet på forbrukeren.
Zhang San sa: Jeg er Zhang San, det er dampede boller til meg, jeg kommer tilbake for å hente dem.
Li Si sa: Jeg er Li Si, det er dampede boller til meg, jeg kommer tilbake for å hente dem.
activemq skrev ned navnene Zhang San og Li Si.

Når man deler dampede boller, gir ett hode fortsatt dampet bolle.
Etter delingen, da han så at Zhang San ikke snakket, betydde det at han ikke var der, så la ham være der.
Li Si snakket, så det var ikke nødvendig å bli.

Zhang San kom tilbake, lette etter activemq, og tok en titt, dette er ikke Zhang San, ta med de dampede bollene hans raskt.
Det kan være én dampet bolle, eller det kan være 100 dampede boller, det avhenger av hvor mange dampede boller Zhang San har delt siden han dro en stund.

activemq skiller forbrukere etter klientID og abonnentnavn.
-----------------------------
Skap en forbindelse
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); Vedvarende abonnementer krever at du setter dette.
connection.start();

Lag en økt
Sesjonsøkt = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Lag en destinasjon
Emneemne = session.createTopic("userSyncTopic"); Emnenavn

MessageConsumer-forbruker = session.createConsumer(topic); Ordinært abonnement
MeldingForbruker, forbruker = session.createDurableSubscriber(topic,"bbb"); Vedvarende abonnementer


Et annet poeng er at produsenten av meldingen bruker persistent modus når meldinger sendes
MessageProducer produsent = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Hvis ikke, er den vedvarende som standard

(5) Hvis samme "clientID" brukes, regnes det som samme forbruker. Hvis to programmer bruker samme "clientID", kan bare ett koble til activemq samtidig, og den andre tilkoblingen vil rapportere en feil.

(6) Innstillingene i activemq er i conf/activemq.xml, og standardmeldingene lagres i data/kahadb, og meldingene vil ikke gå tapt ved omstart av activemq.

Du kan få tilgang til http://localhost:8161/admin/index.jsp: se informasjon om nåværende køer, temaer og vedvarende abonnenter, sende meldinger og mer.

Du kan kopiere innholdet i activemq-jdbc.xml og endre det, og du kan lagre meldingen i andre databaser.




Foregående:360-billett som kjøper femte generasjons VIP-kanal, sprekker, går raskt inn i VIP-køen
Neste:. .Net-plattformen
 Vert| Publisert på 09.01.2017 13:41:53 |
1 Sammenligning av tekniske egenskaper ved kø og tema
navn
Tema

Oversikt
Publiser Abonner meldinger Publiser abonnementsmeldinger
Punkt-til-punkt Punkt-til-punkt
Det finnes ingen stat
Emnedata er som standard tilstandsløse.
Kødata lagres som en fil på MQ-serveren som standard, for eksempel lagres Active MQ vanligvis under $AMQ_HOME\data\kr-store\data. Den kan også konfigureres som en databaselagring.
Integritetsgaranti
Det er ingen garanti for at alle data publisert av utgiveren vil bli akseptert av abonnenten.
Kø garanterer at hver eneste databit kan mottas av mottakeren.
om meldingen vil gå tapt
Generelt, når en utgiver publiserer en melding om et tema, er det kun suben som lytter til emneadressen som kan motta meldingen. Hvis det ikke er noen sub som lytter, går temaet tapt.
Avsenderen sender en melding til målkøen, og mottakeren kan motta meldinger på denne køen asynkront. Meldinger på køen vil ikke gå tapt hvis det ikke finnes noen mottaker som tar imot dem for øyeblikket.
Mottakspolicy for meldingsutgivelse
Én-til-mange-policy for publisering og mottak av meldinger, flere subber som lytter til samme emneadresse kan motta meldinger sendt av utgiveren. Subben mottar varslingen til mq-serveren
Én-til-én meldingspubliserings- og mottakspolicyer, meldinger sendt av en avsender, kan kun mottas av én mottaker. Etter at mottakeren har mottatt, varsler MQ-serveren MQ-serveren om at den er mottatt, og MQ-serveren sletter eller utfører andre handlinger på meldingene i køen.

 Vert| Publisert på 09.01.2017 13:42:15 |
Den største forskjellen mellom tema og kø er at temaet er i form av kringkasting, som varsler alle nettbaserte lytteklienter om at det er en ny melding, og klienten uten overvåking vil ikke motta meldingen; Kø, derimot, varsler en av flere lytteklienter på en peer-to-peer-måte.

2 Sammenligning av meldingsbehandlingseffektivitet mellom emne- og kømetoder
        Ved å øke antall samtidighet til lytteklienten, verifiser du om meldingspushen til temaet vil reduseres betydelig på grunn av økningen i samtidighet til lytteklienten.
        Ut fra de målte resultatene er det ingen signifikant forskjell i effektiviteten ved å sende og motta meldinger sendt med topic-metoden under forutsetning av én abonnent og 100 abonnenter, men under premisset om 500 abonnenter (tråder) samtidig er effektivitetsforskjellen åpenbar (på grunn av samtidigheten på 500 tråder er CPU-bruksraten på maskinen min så høy som 70-90 %), så det er umulig å bekrefte om det er en ytelsesflaskehals forårsaket av min lokale test eller en ytelsesflaskehals i topic-meldingssendingsmetoden, noe som resulterer i en betydelig reduksjon i effektivitet).
        Det er ingen vesentlig forskjell i effektiviteten av å sende og motta meldinger sendt via emnemetode og kømodus under forutsetning av én abonnent og 100 abonnenter, men under forutsetningen av 500 abonnenters samtidighet er effektiviteten til emnemodus betydelig lavere enn til kø.
        Effektiviteten ved å sende og motta meldinger sendt i kømetoden endres ikke vesentlig under forutsetningen av én abonnent, 100 abonnenter og 500 abonnenter.
Målte data for emnet:


Det totale antallet meldinger sendt av avsenderen
Det totale antallet meldinger mottatt av alle abonnenter
Gjennomsnittlig tid det tar å sende og motta meldinger
Enkeltabonnent
100
100
101ms
100 abonnenter
100
10000
103 ms
500 abonnenter
100
50000
14162ms

Målte data i køen:


Det totale antallet meldinger sendt av avsenderen
Det totale antallet meldinger mottatt av alle abonnenter
Gjennomsnittlig tid det tar å sende og motta meldinger
Enkeltabonnent
100
100
96 ms
100 abonnenter
100
100
96 ms
500 abonnenter
100
100
100 ms

Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com