Hi all,
I’m new to Temporal and am refactoring a set of Go microservices that currently communicate via RabbitMQ. I’d like Temporal to own the orchestration while still talking to those external services over RMQ.
Current flow
- MinIO event triggers the process.
- We ingest and parse a file from MinIO.
- We send a message to an external service over RabbitMQ and wait for its result (also via RabbitMQ).
- For each event in the file, we run a sub-process.
- Each event’s sub-process may again call an external service via RabbitMQ.
Proposed Temporal design
- RabbitMQ ↔ Temporal bridge: a thin service that listens on RMQ queues and calls
SignalWorkflow
/SignalWithStartWorkflow
. - Worker A: runs the parent workflow + child workflows (orchestrators).
- Worker B: runs ingestion activities.
- Worker C: runs activities for child workflows.
- Parent workflow sends work to multiple task queues that these workers listen to.
Questions
- Is the thin “RMQ bridge” pattern (consumer → Signal/SignalWithStart) the recommended approach, or would you embed RMQ consumers inside the worker?
- Would you keep separate binaries/pods for each worker role, or one binary with multiple task queues? Pros/cons you’ve seen?
- For “per-event” processing, should I spin up a child workflow per event, or keep it as activities with a loop and maybe
ContinueAsNew
to manage history size? - Any gotchas around idempotency/DLQ when using
SignalWithStartWorkflow
from RMQ messages?
Stack details: Go SDK, Temporal on Kubernetes, external services stay as-is (RMQ).
Thanks for any pointers or examples!