Ho creato un AQ in oracle e scritto 2 utenti JMS in Java per ascoltare la coda. A volte ho osservato che se producevo qualche messaggio in coda; il numero di messaggi dequalificati dalla coda è maggiore di quello accodato. Significa che alcuni messaggi vengono consumati due volte.Oracle AQ stesso messaggio viene consegnato due volte
ho creato coda con la proprietà: - multiple_consumers => FALSE
E i consumatori JMS sta lavorando in CLIENT_ACKNOWLEDGE mode
Please help me imparare le possibili ragioni di tale comportamento ed è la soluzione. Pertanto, posso replicare il problema e risolvere il problema precedente e garantire che il numero di messaggi accodati sia uguale al numero di messaggi rimossi dalla coda in caso di più utenti JMS che ascoltano lo stesso AQ.
In realtà il processo è simile a Consumatore consuma il messaggio, lo registra nella tabella Database e invia ACK. se c'è qualche eccezione nell'elaborazione, quel messaggio viene spostato nella coda delle eccezioni. Ho creato più utenti JMS perché se uno non è in grado di altri utenti può elaborare i messaggi i.e; per garantire che il sistema funzioni in modo efficiente e che vi sia disponibilità elevata. Quindi, in questo scenario, in cui ACK non viene eseguito o viene generata un'eccezione, il messaggio viene consumato una volta. –
Ok. Ma questa è comunque una delle ragioni più probabili (che non sia stata inviata una richiesta). Non ho familiarità con il contatore di dequeue e il modo in cui calcola le deboche (vale a dire un messaggio non associato ma inviato alla coda o meno, che dire di un'operazione di rollback, ecc.). Aggiungi esempi di codice e maggiori informazioni nella tua Q per risposte migliori. –
In realtà, ho eseguito degli scenari di test in cui ho contato il numero di messaggi accodati e il numero di messaggi disattivati e la probabilità di ottenere tale scenario è molto rara. In realtà è come se avessi accodato messaggi di 15K e l'ho rimosso dalla coda e ho eseguito questo test per 20-30 volte e solo due o tre volte ho osservato che il conteggio di dequeued è maggiore del conteggio di accodamento. –