consumatori multiple per una singola coda in MassTransit
-
21-09-2019 - |
Domanda
E 'possibile avere diversi consumatori in ascolto su una singola istanza MSMQ e utilizzare l'interfaccia dei consumatori selettivo per avere ciascuna un affare con un sottoinsieme distinta dei messaggi? Io non riesco a ottenere questo scenario per funzionare correttamente utilizzando pub / sub - un singolo consumatore sulla coda funziona bene, ma quando si utilizza> 1 i consumatori (diverse istanze dello stesso eseguibile) nessun messaggio compare da nessuna parte. Se ho capito bene, questo non è il caso di 'consumatori' concorrenti, dal momento che solo un singolo consumatore potrà elaborare un singolo messaggio.
Qualsiasi aiuto o puntatori sono apprezzati.
Soluzione
Se si utilizza MassTransit di inviare messaggi da una coda MSMQ, si raccomanda che la coda è locale alla casella.
Detto questo, se si dispone di più processi che stanno leggendo dalla stessa coda ai fini della distribuzione del carico di un messaggio, è possibile utilizzare il selettivo di ricezione di consumare solo i messaggi in ogni istanza che sono rilevanti per quel processo.
Per esempio, se si dispone di più istanze di un'applicazione che inviano messaggi a un servizio e che il servizio risponde con un messaggio correlato, è possibile iscriversi al messaggio correlato da identificatore e solo i messaggi sottoscritti verrà consegnato. I messaggi che non sono stati selezionati rimangono nella coda fino elaborata da uno dei processi che sono interessati.
A causa di questo motivo, si consiglia vivamente che tale scadenza essere impostata sul messaggio risposte in modo ignorati non intasare la coda nel corso del tempo.
Questo scenario è abbastanza comune quando si replica un modello di richiesta / risposta tramite la messaggistica.