2013-05-10 12 views
7

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.

risposta

3

Senza aver visto il tuo codice, CLIENT_ACKNOWLEDGE in genere dice che stai inviando conferme manualmente. Se non si invia una richiesta, il messaggio non verrà eliminato e il broker proverà a riconsegnarlo in una fase successiva (ad esempio quando si riavvia la connessione o simili). Questa potrebbe essere la causa della tua preoccupazione.

+0

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. –

+0

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. –

+0

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. –

Problemi correlati