Impostazioni persistenti di abbonamento ActiveMQ Impostando la modalità di consegna PERSISTENT per l'editore, puoi utilizzare abbonamenti persistenti per gli abbonati, garantendo così che il programma Pub/Sub riceva tutti i messaggi pubblicati. Gli abbonamenti ai messaggi sono suddivisi in abbonamenti non durevoli e abbonamenti durevoli, e gli abbonamenti non durevoli possono ricevere messaggi inviati a un argomento solo quando il client è attivo, cioè quando il client è offline, i messaggi inviati all'argomento durante questo periodo verranno persi e mai ricevuti. Quando il client è offline, ActiveMQ salva tutti i messaggi inviati al soggetto in base al suo ID, e quando il client si riconnette a ActiveMQ, riceve tutti i messaggi inviati al soggetto quando è offline. Gli abbonamenti persistenti aumentano il sovrappeso e hanno solo un utente attivo in un abbonamento persistente alla volta. Passaggi per stabilire un abbonamento persistente: 1. Impostare un ID cliente per la connessione; 2. Specificare un nome di abbonamento per l'argomento dell'abbonamento; La combinazione sopra deve essere unica. Il codice implementa abbonamenti persistenti
(1) Quando si usa la coda, cioè durante la coda, c'è un solo consumatore per messaggio, quindi la persistenza è molto semplice, basta salvarlo nel database
。 Poi, qualsiasi consumatore può prenderlo e smaltirlo. Non importa se un consumatore lo spegne per un po'.
(2) Quando si usa un topic, cioè durante l'iscrizione, ogni messaggio può avere più consumatori, il che è più problematico.
Primo, assumendo che i consumatori siano consumatori comuni, ------------------------ Dopo il lancio di <1> activemq, è stato rilasciato News 1, ma purtroppo nessun utente sta iniziando ora, cioè nessun consumatore si è abbonato. Così
, la notizia è stata abbandonata.
<2> Consumer 1 è iniziato, si è connesso ad activemq, si è iscritto e ha atteso un messaggio~~
ActiveMQ pubblica il messaggio 2, OK, il consumatore 1 lo riceve e lo elabora. Abbandono del messaggio.
<3> Consumer 2 è stato lanciato, connesso ad activemq, abbonato e in attesa di un messaggio~~
ActiveMQ pubblica il messaggio 3, OK, Consumer 1, Consumer 2 sono tutti ricevuti ed elaborati. Abbandono del messaggio.
<4> Consumer 1 è disattivato.
ActiveMQ pubblica il messaggio 4, OK, il consumatore 2 lo riceve e lo elabora. Abbandono del messaggio.
<5> Consumer 1 è ricominciata.
ActiveMQ pubblica i messaggi 5, OK, Consumer 1 e Consumer 2 li ricevono e li elaborano. Abbandono del messaggio. ----------------------------- Per riassumere: Activemq semplicemente invia messaggi al consumatore attualmente avviato. I consumatori che disattivano perderanno molti messaggi e non potranno più riceverli.
Se il messaggio inviato contiene dati di sincronizzazione utente importanti e li manca, i dati utente non sono sincronizzati.
Quindi, come si fa a far sì che i consumatori ricevano i messaggi persi quando riavviano?
La risposta è un abbonamento persistente. -----------------------------
Gli abbonamenti ordinari, senza distinguere tra i consumatori, se ci sono alcune teste nel locale, lanciano qualche panino al vapore. Per gli abbonamenti persistenti, devi registrare il nome del consumatore. Zhang San disse, sono Zhang San, ci sono dei panini al vapore per me, tornerò a prenderli. Li Si disse: Sono Li Si, ci sono dei panini al vapore per me, tornerò a prenderli. activemq annotò i nomi di Zhang San e Li Si.
Poi, quando si dividono i panini al vapore, una testa dà comunque un panino al vapore. Dopo la divisione, quando vide che Zhang San non parlava, significò che non c'era, quindi lasciargli uno. Li Si parlò, quindi non c'era bisogno di restare.
Zhang San è tornato, ha cercato attivisti e ha dato un'occhiata, questo non è Zhang San, portagli subito i panini al vapore. Può essere un panino al vapore, oppure 100 panini al vapore, dipende da quanti panini al vapore Zhang San ha diviso da quando è partito per un po'.
activemq distingue i consumatori per clienteID e nome dell'abbonato. ----------------------------- Crea una connessione connessione = connectionFactory.createConnection(); connection.setClientID("bbb"); Gli abbonamenti persistenti richiedono di impostare questa impostazione. connection.start();
Crea una sessione Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Crea una destinazione Topic topic = session.createTopic("userSyncTopic"); Nome dell'argomento
MessaggioConsumatore = session.createConsumer(argomento); Abbonamento regolare MessaggioConsumatore consumatore = session.createDurableSubscriber(topic,"bbb"); Abbonamenti persistenti
Un altro punto è che il produttore del messaggio utilizza la modalità persistente quando invia messaggi MessaggioProduttore produttore = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Se non lo fa, è persistente di default
(5) Se viene utilizzato lo stesso "clientID", si considera lo stesso consumatore. Se due programmi usano lo stesso "clientID", solo uno può connettersi ad activemq contemporaneamente, e la seconda connessione segnala un errore.
(6) Le impostazioni di activemq sono in conf/activemq.xml, e i messaggi predefiniti sono salvati in data/kahadb, e i messaggi non si perderanno al riavvio di activemq.
Puoi accedere a http://localhost:8161/admin/index.jsp: visualizzare informazioni sulle code attuali, sugli argomenti e sugli abbonati persistenti, inviare messaggi e altro ancora.
Puoi copiare il contenuto nel activemq-jdbc.xml e modificarlo, e puoi salvare il messaggio in altri database. |