跡地この広告は、90日以上更新していないブログに表示しています。いうNode.js製のエージェントベースのタスクフローフレームワークを作った。して作ったのか?自宅の家電を操作するためのプログラムを書いていたら、色々なフローがごちゃごちゃになったから。経由でエアコンを操作したくもなった、さてどう書こうかと?どんなもの?突然だけど空港などの荷物の仕分けをイメージしてください。エージェントは、ゲートから出てくるアイテムを受け取り、処理して別のゲートに送る。ゲートの向こう側がどうなっているかは、エージェントは何も知らない。エージェントは空のアイテムを来たら作業を終える。アーキテクチャのイメージはこんな感じです。エージェントはゲートからアイテムを受け取ることと、別のゲートに新たにアイテムを送ることができる。アイテムはシンプルなオブジェクトだ。エージェントは自身のタスクに集中できる。前工程や次工程が増えても減ってもアイテムの構成が変わらなければ問題なく動く。入出力がシンプルなためユニットテストも簡単にかける。エージェントはゲートの実体を知らないので、入力元ゲートをスタブに、出力先ゲートをモックに、簡単に置き換えられる。フレームワークに出てくる概念のまとめゲート(Gate)はファイルストレージやデータベース、キュー、APIサービスといった入出力のエンドポイントです。エージェント(Agent)はゲート間でアイテムを処理するタスクワーカーです。ゲートが何に通じているかは関知しません。アイテム(Item)はゲート間を流れるシンプルなオブジェクトでエージェントが処理する対象です。今回のフレームワークを作るきっかけになったホームコントロールプログラムを通じて説明してみます。上でデーモンとして動いています。テキストメッセージをポストします。アイテムとして利用します。HTTPインターフェイスを備える赤外線送信器に命令します。一定の間隔でアイテムを生成します。分おきにエージェントの処理を走らせます。指定のコレクションに送信されたアイテムを登録します。アイテムの流すジョイントです。対して送信すべき赤外線信号を指定します。文言が解釈できなかったときにポストします。書き込みとジョイントとなるゲートに送ります。