引当と発送 v1

examples/fulfillment/temporal/fulfillment.ja.flow · dandori doc

注文の明細ごとに在庫を引き当て、配送を手配し、倉庫の梱包を待ってから、お客さまに知らせる。明細は並べて引き当て、足りない明細があれば、引き当てたぶんを戻す。Temporal 向けの版:倉庫の呼び出しは dandori が Connect で生成するアクティビティ。配送チームのワークフローが専用のタスクキューで配送を手配し(子ワークフロー、arrange_delivery.ja.flow)、翌日便の車がなければ通常便で頼み直す。梱包の依頼、お知らせ、記録は自分で書くアクティビティで、梱包の担当者は、生成したクライアントが送る Update でコールバックに応答する

flow
let 結果 = for 明細 in 注文.明細 at most 50 in parallel, 10 at a timeyield 答えfor 一つ in 結果 at most 50for 戻す in 結果 at most 50 in parallelすべてのイテレーションが終わったらshortsecured最後の項目のあとtruesome idnoneすべてのイテレーションが終わったらfalsesome 贈り物some 一言nonenoneon 翌日便の空きなしon failureon failureon timeouton 宛先なし引当と発送 v173 判定 = 急ぎ(…)rule 出荷の急ぎ.ruletimeout, failure → ワークフローが失敗する!75 答え = 在庫を引き当てる(…)connect warehouse StockService/Reserveretry 2 times every 1 second on 混雑混雑, timeout, failure → そのイテレーションが失敗し、ワークフローも失敗する!77 let 足りない = false79 match 一つ.stock80 let 足りない = true82 match 足りない85 match 戻す.id86 引当を戻す(…)connect warehouse StockService/Releasetimeout, failure → そのイテレーションが失敗し、ワークフローも失敗する!88 fail 在庫不足"注文 {注文.id} には在庫の足りない明細があります"90 let 宛名 = none91 match 注文.贈り物93 let 宛名 = 贈り物.宛名94 match 贈り物.メッセージ95 記録する(…)自分で書くタスクtimeout, failure → ワークフローが失敗する!98 配送 = 配送を手配する(…)flow arrange_delivery.ja.flow100 配送 = 配送を手配する(…)flow arrange_delivery.ja.flow101 fail 配送の手配の失敗"注文 {注文.id} の配送を手配できませんでした"102 fail 配送の手配の失敗"注文 {注文.id} の配送を手配できませんでした"103 箱 = 梱包を待つ(…)自分で書くタスク(応答はコールバック)timeout 2 daystimeout → 104 行目; failure → ワークフローが失敗する!104 fail 梱包の遅れ"二日たっても梱包の知らせがありません"105 知らせる(…)自分で書くタスク宛先なし → 106 行目; timeout, failure → ワークフローが失敗する!107 succeed 引当 = 結果, 追跡番号 = 配送.追跡番号

呼び出し

行呼び出し呼ぶものリトライタイムアウト失敗したとき
73判定 = 急ぎ(…)規則 出荷の急ぎ.rule1 秒後と 2 秒後の 2 回(failure)—timeout・failure → ワークフローが失敗する
75答え = 在庫を引き当てる(…)connect warehouse StockService/Reserve・key1 秒おきに 2 回(混雑)—混雑・timeout・failure → そのイテレーションが失敗し、ワークフローも失敗する
86引当を戻す(…)connect warehouse StockService/Release・idempotent——timeout・failure → そのイテレーションが失敗し、ワークフローも失敗する
95記録する(…)自分で書くタスク・idempotent——timeout・failure → ワークフローが失敗する
98配送 = 配送を手配する(…)flow arrange_delivery.ja.flow——翌日便の空きなし → 99 行目
timeout・failure → 102 行目
100配送 = 配送を手配する(…)flow arrange_delivery.ja.flow——翌日便の空きなし・timeout・failure → 101 行目
103箱 = 梱包を待つ(…)自分で書くタスク(応答はコールバック)—2 日timeout → 104 行目
failure → ワークフローが失敗する
105知らせる(…)自分で書くタスク——宛先なし → 106 行目
timeout・failure → ワークフローが失敗する

終わり方

行終わり方
88fail 在庫不足 "注文 {注文.id} には在庫の足りない明細があります"
101fail 配送の手配の失敗 "注文 {注文.id} の配送を手配できませんでした"
102fail 配送の手配の失敗 "注文 {注文.id} の配送を手配できませんでした"
104fail 梱包の遅れ "二日たっても梱包の知らせがありません"
107succeed 引当 = 結果, 追跡番号 = 配送.追跡番号