Как вы получаете состояние WorkflowExecution, если все, что у вас есть, это workflowId в Amazon SWF

Кажется, что все операции SWF для получения состояния выполнения всегда также нуждаются в runId (их ссылка на выполнение рабочего процесса), и я не хочу хранить это. Я хочу быть в состоянии сделать поиск на основе workflowId только (мой идентификатор, а не их). Возможно ли что-нибудь подобное вообще?

Я имею в виду, я думаю, я мог бы добавить некоторые теги, чтобы получить его по тегам, но это немного неловко, если я уже прошел workflowId также.

1 ответ

Решение

Да, согласно документации API ListOpenWorkflowExecutions, пользователь может фильтровать открытые выполнения по workflowId.

Пример Python, использующий boto.swf (используйте 1. из этого поста для настройки домена):

$ ipython
Python 2.7.3 (по умолчанию, 10 апреля 2013 г., 06:20:15) 
Введите "авторское право", "кредиты" или "лицензия" для получения дополнительной информации.

В [1]: импортировать boto.swf.layer2 как swf

В [2]: domain = swf.Domain(name='stackru')

В [3]: domain.workflows()
Out[3]: [ WorkflowType 'MyWorkflow-1.0' в 0x32a44d0 ]

В [4]: ​​myworkflow = domain.workflows()[0]

В [5]: execute = myworkflow.start(workflow_id='my_wf_id', task_list='default')

В [6]: other_execution = myworkflow.start(workflow_id='some_other_wf_id', task_list='default')

В [7]: domain.executions()
Из [7]: 
[ WorkflowExecution 'MyWorkflow-1.0' в 0x32a4910,
  WorkflowExecution 'MyWorkflow-1.0' в 0x32ac090,
  WorkflowExecution 'MyWorkflow-1.0' в 0x32ac210 ]

В [8]: execute.describe()
Из [8]: 
{'executeConfiguration': {'childPolicy': 'TERMINATE',
  'executeStartToCloseTimeout': '3600',
  'taskList': {'name': 'default'},
  'taskStartToCloseTimeout': '300'},
 'executeInfo': {'cancelRequested': False,
  'выполнение': {'runId': '...',
   'workflowId': 'my_wf_id'},
  'executeStatus': 'OPEN',
  'startTimestamp': 1374482188.063,
  'workflowType': {'name': 'MyWorkflow', 'version': '1.0'}},
 'openCounts': {'openActivityTasks': 0,
  'openChildWorkflowExecutions': 0,
  'openDecisionTasks': 1,
  'openTimers': 0}}

В [9]: domain.executions(workflow_id='my_wf_id')
Выход [9]: [ WorkflowExecution 'MyWorkflow-1.0' в 0x344fad0 ]

В [10]: domain.executions(workflow_id='my_wf_id')[0].describe()
Из [10]: 
{'executeConfiguration': {'childPolicy': 'TERMINATE',
  'executeStartToCloseTimeout': '3600',
  'taskList': {'name': 'default'},
  'taskStartToCloseTimeout': '300'},
 'executeInfo': {'cancelRequested': False,
  'выполнение': {'runId': '...',
   'workflowId': 'my_wf_id'},
  'executeStatus': 'OPEN',
  'startTimestamp': 1374482188.063,
  'workflowType': {'name': 'MyWorkflow', 'version': '1.0'}},
 'openCounts': {'openActivityTasks': 0,
  'openChildWorkflowExecutions': 0,
  'openDecisionTasks': 1,
  'openTimers': 0}}
Другие вопросы по тегам