【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?

Azure,机制,ServiceBus ,内置 · 浏览次数 : 108

小编点评

## 问题解答: 是的,Service Bus的SDK有内置的重试机制,可以通过 `ServiceBusRetryOptions` 配置。默认情况下,它设置了 3 次重试,每次 60 秒的间隔时间。 重试机制可以帮助解决发送消息多次出现超时错误的问题,因为它允许在发送失败后重新发送该消息。 **重试机制的配置方法:** * 在 `ServiceBusClientOptions` 中设置 `RetryOptions` 属性。 * `RetryOptions` 中可以设置以下属性: * `MaxRetries`:重试的最大次数。 * `Delay`:重试之间的延迟时间。 * `MaxDelay`:重试的最大延迟时间。 * `Mode`:重试模式,默认值为 `Exponential`。 **示例代码:** ```csharp string connectionString = "your_connection_string"; string queueName = "your_queue_name"; using var serviceBusClient = new ServiceBusClient(connectionString, options); // ... // Handle exceptions and retry logic ``` **重试机制的用法:** 在发送消息失败时,Service Bus 会使用重试机制重新发送该消息。如果设置了正确的重试配置,服务 bus 将会在失败后尝试发送消息几次后恢复正常。 **注意:** 重试机制可能无法解决所有发送消息失败的问题。如果服务 bus 无法连接到服务器,或服务器无法处理请求,消息可能会永远无法发送。

正文

问题描述

使用 Azure Service Bus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误。

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

ErrorCode: TimedOut (ServiceCommunicationProblem)

 

为了预防这类偶发的Timedout异常对应用的影响,需要重新再次发送或接收消息,是否有内置的重试机制呢?

 

问题解答

有的,Service Bus的SDK有内置的重试机制,通过ServiceBusRetryOptions 配置。其中,默认的MaxRetries 次数为3次,每次重试的间隔时间默认为 60秒。

 

如在 .NET应用代码中使用示例:

using Azure.Messaging.ServiceBus;

string connectionString = "<connection_string>";
string queueName = "<queue_name>";

// Because ServiceBusClient implements IAsyncDisposable, we'll create it
// with "await using" so that it is automatically disposed for us.
var options = new ServiceBusClientOptions();
options.RetryOptions = new ServiceBusRetryOptions
{
    Delay = TimeSpan.FromSeconds(10),
    MaxDelay = TimeSpan.FromSeconds(30),
    Mode = ServiceBusRetryMode.Exponential,
    MaxRetries = 3,
};
await using var client = new ServiceBusClient(connectionString, options);

 

对于 Timeout 的异常,如果持续一小段(间断性)发送,可以通过 telnet 或 psping 来查看端口,网络稳定性。

# 测试端口,服务器是否能ping通
telnet <yournamespacename>.servicebus.chinacloudapi.cn 5671


#测试是否存在网络丢包问题
.\psping.exe -n 25 -i 1 -q <yournamespace>.servicebus.chinacloudapi.cn:5671 -nobanner     

 

参考资料

Service Bus的重试策略:https://learn.microsoft.com/zh-cn/azure/architecture/best-practices/retry-service-specific#retry-mechanism-6

Service Bus Timeout 异常 :https://docs.azure.cn/zh-cn/service-bus-messaging/service-bus-troubleshooting-guide#connectivity-certificate-or-timeout-issues

Service Bus Socket 异常 :https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-exceptions#cause-2

 

与【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?相似的内容:

【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?

问题描述 使用 Azure Service Bus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误。 A connection attempt failed because the connected party did not properly respond after a

【Azure 服务总线】Azure门户获取ARM模板,修改Service Bus的TLS版本

问题描述 在Azure中创建Sverice Bus服务后,如果想修改服务的TLS版本,是否有办法呢? 问题解答 通过Service Bus的ARM模板,修改属性值中的 minimumTlsVersion,可以设置Service Bus服务最低支持的TLS版本,如1.0, 1.1, 1.2 操作步骤为

【Azure 服务总线】使用Azure Service Bus 时,出现证书错误: 所使用的证书具有无法验证的信任链

问题描述 在Azure中连接 Service Bus 服务发送消息时发生证书错误,抛出证书异常消息: 或 The X.509 certificate CN=servicebus.chinacloudapi.cn, OU=Azure, O=Shanghai Blue Cloud Technology

【Azure 服务总线】如何批量删除Azure Service Bus中的Topics(数量较多,需要过滤后批量删除)

问题描述 Azure Service Bus 的门户操作页面上,是否可以批量删除其中的Topics呢? 问题解答 Azure Service Bus门户或Service Bus Explorer工具没有提供批量删除Topic的方法。但是可以自己写脚本删除,并且可以在删除的时候自定义过滤条件。 以Py

【Azure 服务总线】查看Service Bus中消息多次发送的日志信息,消息是否被重复消费

问题描述 使用Service Bus,发现消息被重复消费。如果要查看某一条消息的具体消费情况,需要那些消息的属性呢? 问题解答 使用Azure Service Bus,当消费发送到服务端后,就会生产相关属性,如Partition Key,Message ID,Enqueued Time, Seque

【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤

问题描述 在使用Azure Cloud Service(云服务),默认的情况下都是使用的 HTTP 服务,通过 Visual Studio 2022 创建的默认 Cloud Service项目中,在ServiceDefinition.csdef 服务定义文件中,值默认开启了HTTP 80的Endpo

【Azure Key Vault】Key Vault能不能生成DigiCert证书?能不能自动 Rotate 证书呢?

问题描述 因为Azure Key Vault服务上保管的证书可以轻松的与其他Azure服务集成使用,所以需要知道 Key Vault 能不能生成 DigiCert 证书?能不能自动 Rotate 证书呢? 问题解答 Azure Key Vault本身只是一个保管库,它不会颁发证书。但是可以在页面上直

Azure Service Principals ----- Azure 上最好保守的秘密的服务

一,引言 Azure Service Principals 是 Azure Active Directory (AAD) 中的一种标识,代表应用程序,服务,自动化流程。Service Principals 支持各种 Azure 服务和资源之家的安全通信,为应用程序提供了一种进行身份验证并于 Azur

【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题

Azure.Identity.AuthenticationFailedException: 'ClientSecretCredential authentication failed: AADSTS90002: Tenant '********-****-****-****-************' not found. Check to make sure you have the corre

【Azure 云服务】Cloud Service Worker Role Workerrole突然停机,查看Events发现 Defrag Error (0x8900002D)

问题描述 Cloud Service Worker Role Workerrole突然停机,查看Events,发现是错误源为 Defrag。 错误消息: The volume Windows was not optimized because an error was encountered: Ne