2014-01-19 20 views
7

私は、例えば 'messages'という名前のAzureストレージにキューを持っています。そして、1時間ごとに、いくつかのサービスがこのキューにデータを更新すべきある量のメッセージをプッシュします。しかし、場合によっては、このキューメッセージを別の場所からプッシュして、このメッセージをすぐに処理したいので、このメッセージの優先順位を設定することはできません。Azureキューメッセージの優先度

この問題の最適な解決策は何ですか? 2つの異なるキュー( 'メッセージ'と 'メッセージ優先度')を使用できますか、それとも悪い方法ですか?

+0

Windows Azureキューでは、プライオリティメッセージを設定することはできません。そのため、2つのキューを使用するオプションだけがあります。 Windows Azure Service Busのキューをお勧めしますか?私はそれを個人的に使っていませんが、Windows Azureのキューよりも豊富な機能を持っていると思います。 –

+0

私はWindows Azureサービスバスキューも使用していませんが、調査を試みます。 – bogdan

+0

https://msdn.microsoft.com/en-us/library/dn589794.aspx?f=255&MSPPError=-2147217396 – vladimir77

答えて

7

正しい方法は、複数のキューを使用することです。「通常優先度」と「高優先度」キューです。私たちが実装したのは、単一のワーカー・ロール内の複数のキュー・リーダー・スレッドです。各スレッドは、優先度の高いキューを最初にチェックし、空の場合は通常のキューを探します。このようにして、優先順位の高いメッセージは最初に利用可能なスレッド(ほとんどすぐに処理されます)によって処理され、メッセージがどこに由来するかにかかわらず同じコードが実行されます。それはまた、単一のキューを連続的に見て、ほとんどのメッセージが存在しないためにバックアップされなければならない読者を持つ必要がなくなります。

+0

これは良い方法だと思います。ありがとう。 – bogdan

+1

このアプローチで飢餓問題はありませんか?高優先度のメッセージが十分に与えられれば、通常のメッセージキューは提供されません。 – urig

+0

良い点ですが、「高い優先度」が新しい「通常」になり、多くの優先度の高いメッセージを引き起こしている外部的な問題があります。これは重要なビジネス上の問題であり、対処が必要なパニックです。当社のシステムは車両追跡のためのデータを記録し、「高い優先度」は衝突検知(緊急サービスにテレメトリデータを送信する)のためのものです。その場合は**はありません**高い優先度は、バグが存在しないか、または世界が終わりに来ていない限り正常を超えます –