2016-11-24 12 views
1

連続したWebジョブを一時停止する方法はありますか?サービスバスからのメッセージの受信を一定時間間隔で停止する方法はありますか? 私は常にポストデータを受信して​​いるシステムを持っています。次に、転記されたデータがサービスバスに送信されます。私は、メッセージの処理を止める方法があるのだろうかと思っています。もちろん、もう1つの解決策は、それらのメッセージを送信しないことです。送信者システムのキューにそれらのメッセージを保管します。Azureサービスバス連続WebJobポーズ

+0

私は時間枠を作成し、時間枠が現在の時刻と一致するかどうかを確認して一致するかどうかを確認すると思います。 – 4c74356b41

+0

はい、私はまだメッセージを受信して​​います。最も洗練されたソリューションではないようです。たぶん最高のメッセージを送信することさえありませんが、私はキューイングのメカニズムを実装するために時間を費やしたくないので、より良い方法があるかどうか疑問に思っています –

+0

あなたのwebjobはservicebustriggerを使用していますか? – Thomas

答えて

1

アプリケーション設定でWEBJOBS_STOPPEDを1に設定すると、Webジョブを停止できます。それは少し原油ですが、それはwebjobを停止します。

0

すでにキューイングメカニズムがあります。サービスバス。 ServiceBusTrigger属性を使用して、宣言的にキューに接続しているようです。すなわち

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log) 

これは、連続したWebジョブでメッセージを受信する唯一の方法ではありません。あなたは同じように簡単にこれらのメッセージを受信するQueueClientオブジェクトを使用することができます。

var connectionString = "//connection string here//"; 
var queueName = "samplequeue"; 

var client = QueueClient.CreateFromConnectionString(cnStr, queueName); 

client.OnMessage(message => 
{ 
    string msg = message.GetBody<string>(); 
    // Process message here... 
}); 

Console.ReadLine(); 

(詳細については、https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queuesを参照してください。)

をだからあなたのwebjobに、あなたは2台のバスを聞くことができます:最初は操作可能ですビジネスメッセージを処理するために既に使用しているバスです。新しいトピックはコントロールバスです。常にリスニングしていますが、操作キューの動作を変更する場合は、メッセージを送信するだけです。

"START"をコントロールバスに送ります。そのメッセージを受信すると、上記のコードが呼び出され、運用バスがメッセージの処理を開始します。

処理を停止したい場合は、コントロールバスに "STOP"を送信します。このメッセージが受信されたら、運用バス上のclient.Close();に電話してください。これにより、次の「START」メッセージが受信されるまで、メッセージの処理が一時停止されます。

もちろん、これを拡張することもできます。たとえば、制御バスに「PAUSE 10 MINUTES」を送信すると、バスが停止し、10分後に再起動するようにタイマーを設定できます。あなたはあなたの想像力によって制限されています!

個人的には、平凡なテキストではなくJsonメッセージを使用しますが、あなたのニーズに合ったものを使用します。

関連する問題