Obviously I have a bias :-) but I would be opting for AQ, or more precisely, Oracle Transactional Event Queues, which are more scalable than traditional AQ.
https://www.oracle.com/database/advanced-queuing/ My concerns with (1) and (2) are
- the cost of polling in (1)
- the risk profile with (2). Every time you patch or upgrade Oracle, you're now thinking "Gee, I hope my CDC is unaffected by this". What are you going to do if a security patch for Oracle comes out that breaks you CDC. That's a tough decision point
- in both, home building all of the assumptions about queues (exactly once delivery, message ordering, message correlation, error retyry/processing etc) all now fall to you. What often starts a looking simple, often is simple to get the first 80% of the functionality you want, but a quagmire of complexity to get to 100%
I'm a fan of "Hybrid Approaches", but in a slightly different context. I once did an implementation for a client (using AQ) where most app tasks might result in a small amount of messages being put on the queue, but some app tasks would (conceptually) would result in millions of messages.
For the latter, we still used the queue, but we'd point a modified single message on the queue, which contained info to tell out queue processor "Hey, this message means go an get the 1 million data artefacts that this message represents".