9

AzureServiceバスで断続的な問題が発生しています。散発的に、バスにメッセージを配置すると、次の例外が発生します。

タイプ:InvalidOperationException

メッセージ:仲介されたメッセージ「723eab13dab34351a78bb687d0923b89」がすでに消費されているため、操作を実行できません。操作には新しいBrokeredMessageインスタンスを使用してください。

スタックトレース

at Microsoft.ServiceBus.Messaging.MessagingUtilities.ValidateAndSetConsumedMessages(IEnumerable`1 messages)
at Microsoft.ServiceBus.Messaging.MessageSender.Send(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
at Microsoft.Practices.TransientFaultHandling.RetryPolicy.<>c__DisplayClass1.<ExecuteAction>b__0()
at Microsoft.Practices.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func)
at IQ.IR.Core.ServiceBus.AzureBus`1.Enqueue(T message) in c:\BuildAgent\work\cc0c51104c02a4e9\IQ.IR.Core\ServiceBus\AzureBus.cs:line 69
...Rest of stacktrace snipped as it's within my app

AzureBusの問題のあるコードは次のとおりです。

public void Enqueue(T message)
{
    using (var brokeredMessage = new BrokeredMessage(message) { Label = message.GetType().FullName, TimeToLive = _timeToLive })
    {
        _retryPolicy.ExecuteAction(() => _sender.Send(brokeredMessage));
    }
}

渡されるTメッセージは

[Serializable]
public class ValidationMessage
{
    public string ValidationToken { get; set;}
}

そして、_retryPolicyは

RetryPolicy<ServiceBusTransientErrorDetectionStrategy>

_timeToLiveは12時間のタイムスパンです

何か案は?

4

4 に答える 4

6

.... そして、Abhishek の回答に積み上げると、現在、再試行ごとに新しい BrokeredMessage を作成する必要があるため、再試行ポリシーのスコープを 1 レベル上にする必要があります。ストリームを挿入する場合、そのストリームをブローカリングされたメッセージ内でそのまま使用し、そこから直接ワイヤにプルするため、再試行ループのために事前にストリームのコピーを作成する必要があることに注意してください。

于 2012-09-07T16:22:50.823 に答える
5

このエラーは、メッセージが「送信済み」であるが、処理中にエラーが発生したことを示しています。残念ながら、メッセージを調べてこれを知る簡単な方法はなく、メッセージは消費されたと見なされるため、再利用することはできません。このようなメッセージの状態を照会できるようにしたり、InvalidOperation の代わりに MessagingException をスローしたりするなど、いくつかの改善に取り組んでいます。最後に、メッセージを複製する機能は、このような障害からの回復を容易にするのに役立ちます。

于 2012-09-07T06:13:19.230 に答える
2

私は最近これに遭遇し、別の原因を発見しました. BrokeredMessage を構築していて、MessageSender で送信する前にブレークポイントを設定し、メッセージのプロパティを検査すると、キューにアクセスしてこの例外をスローしようとします. IDE でプロパティを検査せずにメッセージを最初に送信するだけでは、この問題は発生しません。

于 2018-08-23T13:20:35.910 に答える
1

エラーが発生した場合でも、メッセージが送信された可能性はありますか?この場合、再試行する前にメッセージをべき等にする必要がありますか?

于 2012-09-10T19:54:46.163 に答える