Продолжить рабочий процесс Cadence на основе сигнала без блокировки потока

Мы хотим создать рабочий процесс, который содержит следующие шаги в указанном порядке

  1. Выполните несколько синхронных действий.
  2. Запуск внешней операции через событие kafka.
  3. Слушайте события кафки, чтобы узнать результат операции.
  4. В зависимости от результата выполните другие действия.

Kafka может содержать события, не связанные с рабочим процессом, поэтому нам нужен отдельный рабочий процесс для фильтрации событий для этого конкретного рабочего процесса.

Используя каденцию, я планирую разделить ее на два рабочих процесса.

  • Рабочий процесс1: 1 -> 2 -> ждать сигнала -> 4
  • Workflow2: 3 -> Вызов workflow1.signal

Можно ли дождаться сигнала в workflow1 без фактической блокировки потока, чтобы поток тем временем мог обработать другой рабочий процесс.

2 ответа

Решение

Я думаю, что есть некоторое недопонимание того, как работает Temporal/Cadence. Нет требования не блокировать поток, чтобы другие рабочие процессы могли продолжать работу. У рабочего экземпляра не будет проблем с такой ситуацией.

Поэтому я бы рекомендовал заблокировать поток в рабочем процессе, чтобы дождаться сигнала, поскольку это самый простой способ решить ваши бизнес-требования.

Кстати, я не понимаю, зачем вам второй рабочий процесс. Нет необходимости иметь рабочий процесс для фильтрации событий Kafka. Вы можете сделать это прямо в потребителе Kafka, который сигнализирует о первом рабочем процессе.

У меня есть опыт написания потребителей Kafka/Kinesis (не работаю с Cadence, но планирую сделать это в ближайшее время). Мне кажется, что вам нужно заблокировать только 1 поток потребителей и ожидать новых событий из потока Kafka. И этот потребитель может жить где угодно, пока он может разговаривать с вашей системой Cadence, чтобы посылать сигнал рабочему процессу. Для каждого сообщения Kafka (после фильтрации несвязанного), если его можно спроектировать так, чтобы он содержал всю информацию, позволяющую потребителю решить, о каком рабочем процессе сигнализировать, это будет очень просто. Если у вас нет контроля над содержанием сообщения (похоже, у вас уже есть поток), это небольшая уловка. Вашему потребителю может потребоваться найти, какой рабочий процесс вызвать, на основе другого идентификатора в сообщении.

Другие вопросы по тегам