Nogal een naar probleem, waar op internet wel wat ervaringen over staan, maar geen oplossing.
We hebben twee message queues, en twee workers.
Worker 1 verwerkt berichten van queue 1 naar queue 2.
Worker 2 verwerkt berichten van queue 2 naar de database.
De queues zijn transactional, en wanneer er fouten zijn dan wordt er een rollback gedaan. Echter, wanneer queue 2 zijn limiet qua file size bereikt, gaat het verzenden van de berichten gewoon goed, en er wordt geen fout gegooid door de queue.
Hier code van worker 1:
Loopt dus gewoon door; terwijl de berichten niet in queue 2 verschijnen, en ook niet meer terug te vinden zijn.
Wat ik zou willen, is dat er gewoon een fout wordt gegooid wanneer de queue zijn limiet bereikt.
Iemand een idee om dit te bereiken?
Steeds monitoren of de queue zijn size heeft bereikt lijkt me niet de way to go.
We hebben twee message queues, en twee workers.
Worker 1 verwerkt berichten van queue 1 naar queue 2.
Worker 2 verwerkt berichten van queue 2 naar de database.
De queues zijn transactional, en wanneer er fouten zijn dan wordt er een rollback gedaan. Echter, wanneer queue 2 zijn limiet qua file size bereikt, gaat het verzenden van de berichten gewoon goed, en er wordt geen fout gegooid door de queue.
Hier code van worker 1:
code:
1
2
3
4
5
6
7
8
9
10
11
| { if (doAbort) throw new ManualAbortedException(); outputQueue.Send(queueToSend, queueTransaction); } catch (Exception ex) { log.Fatal("error bij committen outputqueue, perform rollback", ex); queueTransaction.Abort(); ProcessState = ProcessState.Failed; return; } |
Loopt dus gewoon door; terwijl de berichten niet in queue 2 verschijnen, en ook niet meer terug te vinden zijn.
Wat ik zou willen, is dat er gewoon een fout wordt gegooid wanneer de queue zijn limiet bereikt.
Iemand een idee om dit te bereiken?
Steeds monitoren of de queue zijn size heeft bereikt lijkt me niet de way to go.