2つのプログラムA、Bがあります。Aが終了したら、Aの結果のデータを使用して、Bにそのことを知らせ、実行を開始してもらいます。
Aは.NETWebアプリケーションです。それはいつも記憶に残っているわけではないと思いますよね?ブラウザから要求された場合にのみ生きていますよね?
以前は、AとBは同じプログラムの2つの機能です。しかし、Bプログラムはビジネス上の理由で失敗することがあります。そして、Bが失敗しなくても、それは時間がかかり、クライアントを長く待ちすぎて不幸にさせます。それで私はBを分離しました。Aをスムーズに使用しているクライアントは満足しています。Bはバックグラウンドでスタッフを行います。
私の現在の設計は次のとおりです。Aが終了すると、Aはデータをデータベースに保存します。BはWindowsサービスです。5分ごとにデータベースをチェックし、新しいジョブが見つかった場合は実行を開始します。A、Bはお互いを知りません。
上司はなぜ5分間アイドル状態なのかと尋ねました。それが私たちのビジネスのいくつかを実装する最も簡単な方法であるため、私は答えました。あまりデザインしませんでした。
それで、私は資料を読みに行きました、そして、Observer Pattern
私が望むもののように思われるのを見つけました。何度か読んだ後Observer Pattern
、同じプログラムのクラスにしか適用できず、クラスとオブジェクトは記憶に残っていると思います。
私の質問が次のとおりかどうかはわかりません:GOF Design Patterns
別のプログラムに適用できますか?
または:RabbitMQのようなものは、このリアルタイム処理の種類の要件をどのように実装しますか?
5分のチェック間隔を非常に短い時間に設定することは想像できません。これはCPUにとって大きな負担です。
編集:私はとについてのこの説明に入りました。これは、検索からこのスレッドを見ている人にとって役立つObserver
とPublish/Subscribe
思います。
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript
オブザーバーとパブリッシュ/サブスクライブパターンの違い
オブザーバーパターンでは、トピック通知の受信を希望するオブザーバー(またはオブジェクト)が、イベントを発生させるオブジェクト(サブジェクト)にこのインタレストをサブスクライブする必要があります。
ただし、パブリッシュ/サブスクライブパターンは、通知の受信を希望するオブジェクト(サブスクライバー)とイベントを発生させるオブジェクト(パブリッシャー)の間にあるトピック/イベントチャネルを使用します。このイベントシステムにより、コードは、サブスクライバーが必要とする値を含むカスタム引数を渡すことができるアプリケーション固有のイベントを定義できます。ここでの考え方は、サブスクライバーとパブリッシャーの間の依存関係を回避することです。
これはオブザーバーパターンとは異なり、適切なイベントハンドラーを実装しているサブスクライバーは、パブリッシャーによってブロードキャストされたトピック通知に登録して受信できます。