Thanks.
Regarding UDP, that all makes sense.
For my short-term needs, to minimize risk and infrastructure changes, it looks like the ASYNC module will work.
Here's the basic outline of what I'm doing:
-------- async_workers=8
route { route(CHECK_IS_EXPENSIVE_OPERATION);
if ($var(isExpensiveOperation)) { async_task_route("COMMON"); } else { route(COMMON); } }
route[COMMON] { # Do all my normal routing logic. } --------
I detect at the very top of the main route whether the operation will be expensive. If so, I process the message with an async worker. If not, I directly process the message on the TCP worker.
The rest of the routing logic remains unchanged. The only difference is that I execute the expensive operations using the async workers.
It's not the prettiest thing in the world, but it seems like an OK short-term fix to relieve pressure. I will revisit the bigger architectural ideas in a later phase.
Thanks again for all your help and good ideas.
Happy Friday. -Cody