Продолжить рабочий процесс Cadence на основе сигнала без блокировки потока - PullRequest
0 голосов
/ 17 июня 2020

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 17 июня 2020

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

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

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

0 голосов
/ 17 июня 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...