gpt4 book ai didi

Azure 服务总线 BrokeredMessage 已被使用?

转载 作者:行者123 更新时间:2023-12-04 10:27:18 25 4
gpt4 key购买 nike

我的 Azure 服务总线间歇性出现问题。有时,在总线上放置消息会导致以下异常:

类型: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 小时的时间跨度

有什么想法吗?

最佳答案

....并补充 Abhishek 的答案:现在您需要为每次重试构造一个新的 BrokeredMessage,因此您的重试策略范围需要再上一层。请注意,如果您放入一个流,我们将在代理消息中按原样使用该流,并将其直接拉到线路上,因此您需要提前复制该流以进行重试循环。 p>

关于Azure 服务总线 BrokeredMessage 已被使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12308440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com