0

Azure にスケジューラといくつかのワーカーがあります。スケジューラはメッセージをキューに入れ、ワーカーはそれらのメッセージをプルして処理します。特定のしきい値に達したら、テーブル ストレージからデータベースにデータを移動する必要があるシナリオに入りました。これらのアイテムは、古いものから順に処理する必要があります。そのしきい値が満たされると、他のすべての項目が順番に処理されます。転送をトリガーした現在のメッセージは、行末に詰めて再処理する必要があります。

それで、私の質問の要点に...

メッセージをそのままキューに再送信するだけで問題ありませんか?それとも問題が発生する可能性はありますか?

queueProvider.SendMessage(message);

同僚は、「彼は何か特別なことをする必要があることについて何かを読んだかもしれないが」と述べました.しかし、私は彼の疑いを確認するものをまだ見ていないので、安全のためにここで質問をすると思いました.

4

2 に答える 2

1

簡単な答えは、大丈夫です。CloudQueueMessage がある場合は、それを任意のキューに送信するだけです (これは、1 日の終わりの単なる REST 要求です)。AddMessage() を実行するたびに、新しい ID が作成されます (同じ pop レシートである可能性がありますが、それは問題ではありません)。そうは言っても、あなたが世話をしたり調査したりしたいことがいくつかあります:

  1. メッセージを 1 つのキューにプッシュし、それをポップして、別のキューまたは同じキューにプッシュする場合、最初のメッセージをキューから削除する必要があります。ポップするだけで、非表示タイムアウトを設定したことを意味しますが、すぐに再表示されます (そして、各キューに同一のメッセージ コンテンツが表示されます)。したがって、メッセージをポップしてすぐにもう一度プッシュすると、同じ内容の 2 つのメッセージがキューに入っています。
  2. メッセージを更新できるようになりました。注文が必要な場合は、これが適切な場合があります。メタデータまたはコンテンツのメッセージ自体で、それが処理のどの段階にあるかを示すことができます。ここでは、思慮深い実装で順序付けを行うことができます。
于 2012-04-10T17:24:45.130 に答える
-1

メッセージは実際には複数回取得される可能性があるため、キューのコンシューマー内のすべてのロジックをべき等にすることをお勧めします。キュー サービスは、少なくとも 1 回はメッセージが配信されることを保証することに注意する必要があります。そのため、このアプローチではメッセージが重複する可能性があります。

于 2012-12-06T10:20:32.293 に答える