See https://www.better-simple.com/django/2023/12/06/fanout-pattern-explained/
and https://docs.celeryq.dev/en/stable/reference/celery.app.task.html#celery.app.task.Task.replace