Okay, I decided to combine both approaches: I use the afterAction method in the controller receiving the data, to trigger execution of a console script:
I usually make a most basic queue. Save the workload to the db and mark it as new, run some crontab task to process the workloads and mark them as such.
If you need it to be more responsive you could notify some service about new workloads to fire up a worker to process it.
In your case, running a command via exec() could equal to notifying a service. If it somehow fails you can always query for unprocessed workloads.