12

WebJobはキューから複数のメッセージを処理していますが、私は望みません。私のキューには、順次処理したい依存メッセージがあります。 私は "BatchSize"を1に設定しようとしましたが、運はありません。それでも、一度に複数のメッセージを処理しています。キューから複数のメッセージを一度に処理するWebJob

答えて

-3

キューの種類は、あなたがやっていることの成功に大きく依存します。なぜキューのバッチサイズが問題になっているのか分かりません。Azure Storage Queueは、サービスバスと同様に、メッセージを次々に表示します。

Azure WebJobsは、ホストしているWebサイトの数に合わせてスケールアウトします。これにより、並行処理の問題が発生する可能性があります。たとえば、キュ​​ープロセッサをWebjobとして継続的に実行している場合、 の2つの WebJobも同じキューのために戦っています。

単一のキュープロセッサが必要な場合は、Webjobをクラウドサービスに移行する方がよいでしょう。そこでは、インスタンス数を100%制御し、Webサイトとインスタンス。

各メッセージを順番に処理する必要があるため、次のメッセージが処理されるのを待つ必要があるため、プロセッサの数をスケールアウトすることは意味がありません。要件を満たしていて、あなたのWebSitesを拡大したい場合は、CloudServiceをより良い方法として提案します。

+1

FYIでは、WebJobをシングルトンとして設定できます。あなたが達成したい唯一のものなら、クラウドサービスに移動する必要はありません – lopezbertoni

13

BatchSize設定(JobHostConfiguration.Queues.BatchSize)は、ServiceBusキュー処理には適用されず、Azureキューに対してのみ適用されます。 ServiceBusのキュー処理を設定するには、ServiceBusConfigurationを使用します。設定したいノブはServiceBusConfiguration.MessageOptions.MaxConcurrentCallsです。 (デフォルトは16である)の単一インスタンス上で並行処理を無効にする1に設定し:単一のメッセージが単一インスタンスの時間で処理されることを確実にする

JobHostConfiguration config = new JobHostConfiguration(); 
ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration(); 
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1; 
config.UseServiceBus(serviceBusConfig); 

JobHost host = new JobHost(config); 
host.RunAndBlock(); 

。 WebAppがスケールアウトされている場合、スケーリングされた各インスタンスはこのモードで実行されます。つまり、インスタンス間で同時処理が行われます。そのいずれかが欲しくない場合は、SingletonAttributeを使用して、関数のインスタンスが)のインスタンスのみを実行するようにすることができます。詳細は、Singleton wiki pageを参照してください。

+0

おかげで、ちょうど私が必要なもの –

0

メッセージの順序依存性がある場合は、操作のパイプラインがある可能性があります。

私は、以下のことを行う自動化プロセスを持っています:1)データベースの作成、2)Webアプリケーションの作成、 3)Webアプリケーションの設定、4)デプロイメントコード。私の場合、物事はその順序で行わなければならない。

はそのケースでは、私は、各タスクのためのキューを作成しました: create-database-queuecreate-webapp-queueconfigure-web-app、および deploy-app-queueを。

タスクを分離するので、この方法で作業する方がはるかに安全です。 1つのキュー内の1つのプロセスが終了すると、次のキューにプッシュすることができます。また、プロセスに新しいステップを簡単に挿入することもできます。たとえば、私は簡単に新しいステップ1.5) Restore database backupを挿入することができます。

さらに、個々のキューを使用して責任の切り離しを促進します。