2

メッセージがAzureキューに入れられるたびにイベントが発生する、イベント駆動型のAzureキューを構築しようとしています。AzureXplorerを使用すると、メッセージはAzureキューに適切に配置されますが、CloudQueueClient.ResponseReceivedイベントは発生しません。AzureV1.4を使用しています。これは私のワーカーロールからのコードです:

public class WorkerRole : RoleEntryPoint
{
    public override void Run()
    {            
        while (true)
        {
            Thread.Sleep(10000);

        }
    }

    public override bool OnStart()
    {
        // Set the maximum number of concurrent connections 
        ServicePointManager.DefaultConnectionLimit = 12;

        var queuDataSource = new AzureQueueDataSource();
        queuDataSource.GetCloudQueueClient().ResponseReceived +=new EventHandler<ResponseReceivedEventArgs>(WorkerRole_ResponseReceived);


        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.
        return base.OnStart();
    }

    void WorkerRole_ResponseReceived(object sender, ResponseReceivedEventArgs e)
    {
        var i = 1;  // Breakpoint here never happends
    }
}
4

1 に答える 1

4

Windows Azureキューは、新しいメッセージをポーリングする必要があります。新しいメッセージのキューをクエリする方法の例については、SDKのサンプルまたはコードを参照してください。

考慮すべき事項のクイックリスト:

  1. ポーリングはWindowsAzureではトランザクションとしてカウントされるため、それらの料金を支払うことになります。
  2. 通常、メッセージが見つからない場合は、何らかの再試行メカニズムを実装することをお勧めします(指数バックオフなど)。
  3. 通常、メッセージをバッチで取得することをお勧めします(ラウンドトリップが少なく、トランザクションが少ないなど)。
  4. メッセージは複数回配信される可能性があることに注意してください(重複メッセージの計画)
  5. 「poisonmessages」を処理するには、「dequeuecount」プロパティを使用します。

これらすべてについて多くの報道があります。上記のリンクのドキュメント/サンプルを参照してください。この記事もかなり良いです:http://blogs.msdn.com/b/appfabriccat/archive/2010/12/20/best-practices-for-maximizing-scalability-and-cost-effectiveness-of-queue-based -messaging-solutions-on-windows-azure.aspx

于 2011-03-27T18:02:05.760 に答える