Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 13505|Risposta: 2

Impostazioni persistenti di abbonamento ActiveMQ

[Copiato link]
Pubblicato su 09/01/2017 11:12:10 | | |

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.




Precedente:Canale VIP di quinta generazione per prendere biglietti 360 si è rotto, entra rapidamente nella fila VIP
Prossimo:. Piattaforma .Net
 Padrone di casa| Pubblicato su 09/01/2017 13:41:53 |
1 Confronto delle caratteristiche tecniche della coda e dell'argomento
nome
Argomento
Coda
Panoramica
Pubblica Iscriviti messaggi Pubblica messaggi in abbonamento
Punto a punto
Non esiste uno stato
I dati degli argomenti sono senza stato di default.
I dati della coda vengono salvati come file sul server MQ di default, ad esempio, Active MQ è solitamente memorizzato sotto $AMQ_HOME\data\kr-store\data. Può anche essere configurato come uno store DB.
Garanzia di integrità
Non vi è alcuna garanzia che ogni dato pubblicato dall'editore venga accettato dall'abbonato.
La coda garantisce che ogni dato possa essere ricevuto dal ricevitore.
se il messaggio andrà perduto
In generale, quando un editore pubblica un messaggio su un argomento, solo il subreddit che ascolta l'indirizzo può ricevere il messaggio. Se non c'è un subreddit che ascolta, l'argomento si perde.
Il mittente invia un messaggio alla coda di destinazione, e il destinatario può ricevere messaggi su questa coda in modo asincrono. I messaggi nella Coda non andranno persi se non c'è un destinatario che li riprenda per il momento.
Politica di ricezione del rilascio dei messaggi
Politica di pubblicazione e ricezione di messaggi uno a molti, più subreddit che ascoltano lo stesso indirizzo possono ricevere messaggi inviati dall'editore. Il sub riceve la notifica al server mq
Politiche di pubblicazione e ricezione di messaggi uno a uno, i messaggi inviati da un mittente possono essere ricevuti solo da un destinatario. Dopo che il destinatario riceve, il server MQ notifica al server MQ che è stato ricevuto, e il server MQ elimina o adotta altre azioni sui messaggi nella coda.

 Padrone di casa| Pubblicato su 09/01/2017 13:42:15 |
La differenza più grande tra topic e queue è che topic si presenta sotto forma di broadcasting, notificando tutti i client di ascolto online che c'è un nuovo messaggio, e il client senza monitoraggio non riceverà il messaggio; Queue, invece, notifica uno dei più client di ascolto in modo peer-to-peer.

2 Confronto dell'efficienza dell'elaborazione dei messaggi tra metodi di argomento e code
        Aumentando il numero di concorrenti del client di ascolto, verifica se il push del messaggio sull'argomento diminuirà significativamente a causa dell'aumento della concorrenza del client di ascolto.
        Dai risultati misurati, non c'è una differenza significativa nell'efficienza nell'invio e ricezione dei messaggi inviati dal metodo topic sotto il presupposto di un abbonato e 100 abbonati, ma sotto il presupposto di una concorrenza di 500 abbonati (thread), la differenza di efficienza è evidente (a causa della concorrenza di 500 thread, il tasso di utilizzo della CPU della mia macchina arriva fino al 70-90%, quindi è impossibile confermare se si tratti di un collo di bottiglia di prestazioni causato dal test locale o di un collo di bottiglia nel metodo di invio messaggi topic). con conseguente diminuzione significativa dell'efficienza).
        Non vi è una differenza significativa nell'efficienza nell'invio e nella ricezione di messaggi inviati tramite metodo topic e modalità coda sotto il presupposto di un abbonato e 100 abbonati, ma con il presupposto di 500 abbonati concorrenti, l'efficienza della modalità topic è significativamente inferiore rispetto a quella della coda.
        L'efficienza nell'invio e nella ricezione dei messaggi inviati nel metodo Queue non cambia significativamente con un abbonato, 100 e 500 abbonati.
Dati misurati per argomenti:


Il numero totale di messaggi inviati dal mittente
Il numero totale di messaggi ricevuti da tutti gli abbonati
Il tempo medio necessario per inviare e ricevere messaggi
Abbonato singolo
100
100
101ms
100 iscritti
100
10000
103ms
500 iscritti
100
50000
14162ms

Dati misurati in coda:


Il numero totale di messaggi inviati dal mittente
Il numero totale di messaggi ricevuti da tutti gli abbonati
Il tempo medio necessario per inviare e ricevere messaggi
Abbonato singolo
100
100
96ms
100 iscritti
100
100
96ms
500 iscritti
100
100
100ms

Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com