0

私は内部的にホストされているAPIを呼び出すキュートリガーとして機能する青空関数を持っています。Azureサービスバスのキューメッセージの処理

有毒ではないという問題のために処理できなかったメッセージを処理する方法については、オンラインで確定的な回答はないようです。

例:

メッセージが受信され、関数がAPIを呼び出しようとします。メッセージのペイロードは正確で、API /サービスは何らかの理由でダウンします(この時間は10分以上かかる可能性があります)。現在の状況は、メッセージの配信数が最大(10)に達してからデッドレターキューにプッシュされ、その後、各メッセージの後に発生します。

配信数を増やしたり、最大に達するとリセットする方法が必要です。あるいは、API /サービスがバックアップされて実行されるまで、キュー上のメッセージの処理を停止したいので、配信カウントをインクリメントせずにメッセージのピークロックを放棄することもできます。 このようにして、サービス間の接続の問題のために、処理できるすべてのメッセージがデッドレターになるようにします。

これを達成するためのアイデアはありますか?

+0

この問題は解決しましたか、さらに支援が必要ですか? –

+0

返信しないことをお詫び申し上げます。私はservice/apiのダウンタイムの場合、スレッドをスリープし、配信カウントを上げることによってトリガーを再試行することを遅らせると考えています。この方法は、それがダウンしている場合、即座に最大の配信数に達していないとデッドレターに落ちていた。あなたの助けをありがとう – jjharrison

答えて

0

現在のところ、メッセージの配信数が最大(10)に達してから、デッドレターキューにプッシュされると、それ以降の各メッセージで発生します。 MaxDeliveryCount超えるについてこのdocument状態として

キューとサブスクリプションがQueueDescription.MaxDeliveryCount/SubscriptionDescription.MaxDeliveryCountの設定を持っているが、 デフォルト値は10です。メッセージがロック(ReceiveMode.PeekLock)で配信されたが、明示的に破棄されたか、またはロックが期限切れになった場合は常に、メッセージのBrokeredMessage.DeliveryCountが増分されます。 DeliveryCountがMaxDeliveryCountを超えると、メッセージはDLDに移され、 `` MaxDeliveryCountExceeded```理由コードが指定されます。

この現象は無効にできませんが、MaxDeliveryCountは非常に大きな数値のに設定されます。

  • ReceiveMode.PeekLock

    下のメッセージを受信するためにあなたが最大配信数のを指定することができます。あなたの条件によると、私はあなたがあなたの目的を達成するために、以下のアプローチをたどることができることを前提と

Azure Portal上のサービスバスキューの「設定>プロパティ」の下の1〜2147483647の間で設定します。あなたのAPI /サービスがダウンしたときは、例外をtry-catchできReceiveMode.ReceiveAndDelete

下のメッセージを受信するために、あなたはあなたのキューにメッセージを再送信することができ

  • +0

    私は例外をキャッチし、キューの後ろにメッセージをプッシュについて考えている。しかし、これは、メッセージが同期しなくなり、データが古いものにプッシュされるという別の問題を引き起こします。 – jjharrison

    +0

    私はあなたの懸念が必要だと思うが、サービスバスはあなたのメッセージをDLQに届かず、この時点で主な問題はあなたのAPI /サービスの利用可能性に関係している。 API /サービスの正常性を監視する必要があります。 –

    関連する問題