キューからメッセージを受信し、指定された Id を持つ製品をドキュメント データベースから読み取り、メッセージに基づいて何らかの操作ロジックを適用し、最後に更新された製品をデータベースに書き戻すワーカー サービスがあるとします (a)。
この作業は、異なる製品を扱う場合でも安全に並行して実行できるため、水平方向にスケーリングできます (b)。ただし、複数のサービス インスタンスが同じ製品で動作する場合、同時実行の問題またはデータベースからの同時実行例外が発生する可能性があります。その場合、何らかの再試行ロジックを適用する必要があります (それでも、再試行は再び失敗する可能性があります)。 .
質問: どうすればこれを回避できますか? 2 つのインスタンスが同じ製品で動作していないことを確認する方法はありますか?
例/使用例: オンライン ストアでは、productA、productB、および productC のセールが 1 時間で終了し、何百人もの顧客が購入しています。購入ごとに、メッセージがキューに入れられます (productId、numberOfItems、price)。 目標: ワーカー サービスの 3 つのインスタンスを実行し、productA のすべてのメッセージが instanceA に、productB が instanceB に、productC が instanceC に到達するようにするにはどうすればよいでしょうか (同時実行の問題は発生しません)。
注: 私のサービスは C# で記述され、ワーカー ロールとして Azure でホストされています。メッセージングには Azure Queues を使用し、ストレージには Mongo を使用することを考えています。また、エンティティ ID はGUID
.
それはテクニック/デザインに関するものなので、問題を解決するために別のツールを使用する場合、私はまだ興味があります.