2017-07-28 6 views
0

私はAzureサービスバスキューまたはトピックのメッセージをスケジュールする最善の方法を考え出していますが、オプションを開いたままにしておくと、スケジュールされたメッセージの代わりにメッセージをすぐに送信できます。私は、最初のメッセージのスケジュールされた時刻に、またはそれ以降に、置換メッセージを送信しようとすると、重複メッセージを作成しないように自分自身を守ることができます。すでにエンキューされているスケジュールされたAzureサービスバスメッセージをキャンセルしようとするとどうなりますか?

メッセージがすでにエンキューされた後、CancelScheduledMessageAsync(QueueClientクラスとTopicClientクラスの両方)でスケジュールされたメッセージをキャンセルしようとするとどうなりますか?それは例外を投げるだろうか?

+0

それ? – mjwills

+0

私は来週それを試してみましょう。私はそれについてのドキュメントを見つけることができていないので誰もが既に知っているかどうかだけの疑問。 –

答えて

1

あなたの説明によると、同様の問題について話しているブログ(Canceling Scheduled Messages)が見つかりました。

は、バージョン3.3.1の前に、予定のメッセージは、それがことはできませんでした、見えるようになる前にキャンセルする必要があります。その値にアクセスしようとすると、InvalidOperationExceptionになります。したがって、将来スケジュールされ、もはや必要とされないメッセージは、後の時間までブローカに「スタック」することになります。

Microsoft Azure Service Bus> = 3.3.1 QueueClientまたはTopicClientを使用してメッセージをスケジュールし、後で取り消すことができます。

また、私は次のコードを経由して私の側にそれをテストしています

BrokeredMessage brokerMsg= new BrokeredMessage("Hello World!!!"); 
long sequenceNumber = await queueClient.ScheduleMessageAsync(brokerMsg, DateTimeOffset.UtcNow.AddSeconds(30)); 

await Task.Delay(TimeSpan.FromMinutes(1)); 
// Cancel scheduled message 
await queueClient.CancelScheduledMessageAsync(sequenceNumber); 

私は紺碧のポータルにログインし、ACTIVE MESSAGE COUNTスケジュール設定したメッセージのCOUNTをチェックします。それがアクティブになる前に、私は、スケジュール設定したメッセージを取り消すことができますが、私はsequenceNumber経由でスケジュール設定したメッセージをキャンセルした場合、スケジュールメッセージがアクティブになった後、次のように、私は例外を取得することができます。あなたがしようとしたときに何が起こった

enter image description here

+0

これをチェックしていただきありがとうございますBruce!だから、私が正しく理解している場合、あなたは、キュー上でアクティブ化された後にメッセージを取り消そうとしたときに例外がスローされるのを見た。 –

+0

はい、キューメッセージが消費される前にキャンセル操作が呼び出されました。スケジュールされたメッセージが有効になっている場合は、このメッセージが消えてもこのメッセージをキャンセルできませんでした。 –

関連する問題