Продолжить рабочий процесс Cadence на основе сигнала без блокировки потока
Мы хотим создать рабочий процесс, который содержит следующие шаги в указанном порядке
- Выполните несколько синхронных действий.
- Запуск внешней операции через событие kafka.
- Слушайте события кафки, чтобы узнать результат операции.
- В зависимости от результата выполните другие действия.
Kafka может содержать события, не связанные с рабочим процессом, поэтому нам нужен отдельный рабочий процесс для фильтрации событий для этого конкретного рабочего процесса.
Используя каденцию, я планирую разделить ее на два рабочих процесса.
- Рабочий процесс1: 1 -> 2 -> ждать сигнала -> 4
- Workflow2: 3 -> Вызов workflow1.signal
Можно ли дождаться сигнала в workflow1 без фактической блокировки потока, чтобы поток тем временем мог обработать другой рабочий процесс.
2 ответа
Я думаю, что есть некоторое недопонимание того, как работает Temporal/Cadence. Нет требования не блокировать поток, чтобы другие рабочие процессы могли продолжать работу. У рабочего экземпляра не будет проблем с такой ситуацией.
Поэтому я бы рекомендовал заблокировать поток в рабочем процессе, чтобы дождаться сигнала, поскольку это самый простой способ решить ваши бизнес-требования.
Кстати, я не понимаю, зачем вам второй рабочий процесс. Нет необходимости иметь рабочий процесс для фильтрации событий Kafka. Вы можете сделать это прямо в потребителе Kafka, который сигнализирует о первом рабочем процессе.
У меня есть опыт написания потребителей Kafka/Kinesis (не работаю с Cadence, но планирую сделать это в ближайшее время). Мне кажется, что вам нужно заблокировать только 1 поток потребителей и ожидать новых событий из потока Kafka. И этот потребитель может жить где угодно, пока он может разговаривать с вашей системой Cadence, чтобы посылать сигнал рабочему процессу. Для каждого сообщения Kafka (после фильтрации несвязанного), если его можно спроектировать так, чтобы он содержал всю информацию, позволяющую потребителю решить, о каком рабочем процессе сигнализировать, это будет очень просто. Если у вас нет контроля над содержанием сообщения (похоже, у вас уже есть поток), это небольшая уловка. Вашему потребителю может потребоваться найти, какой рабочий процесс вызвать, на основе другого идентификатора в сообщении.