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

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

时间:2022-11-14 19:44:57浏览次数:69  
标签:重试 Service service Bus 发送 Azure cn

问题描述

使用 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

 

标签:重试,Service,service,Bus,发送,Azure,cn
From: https://www.cnblogs.com/lulight/p/16890140.html

相关文章

  • 【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & st
    本文介绍使用LinuxVM如何连接到AzureRedis,通过SSL方式(6380)或非SSL方式(6379)问题描述在AzureRedis的官方文档中,介绍了在Windows下,如何通过redis-cli.exe连接Redi......
  • rocketMq springboot2 发送广播消息
    广播消息:一个点发送,所有有监听订阅的程序都能收到消息。应用场景:一个配置更新了,其他点都需要知道配置更新需加载。 mq创建主要是创建组时与队列有点区别mqadminup......
  • rocketMq springboot2 发送有序消息
    有序消息:所有信息往mq中,在broker.conf配置文件中指定产生队列数量。如果是普通队列时,所有消息,会分发到默认队列的各个队列中。是无序的。有序则是,所有消息发送,都指定一个......
  • 正确的邮件发送格式?
    1.收件人:做这件事情的人抄送人:只需要知道这件事就可以主体:用一句话来概括内容.关于...的... 2.dear,allhi,all3.这是我,...详情请看附件附件1-2个可以,直接上传,多个附......
  • 如何实现发送评论时总数自动加一
    使用事件中心,数据操作中的数量查询获取总数,实现总数的实时显示效果展示前置准备使用循环容器制作的评论列表评论数据表,包含一个评论字段已实现发送评论,实时显示评论具体步骤......
  • 如何实现发送评论时总数自动加一
    使用事件中心,数据操作中的数量查询获取总数,实现总数的实时显示效果展示前置准备使用循环容器制作的评论列表评论数据表,包含一个评论字段已实现发送评论,实时显示评论具体步骤......
  • 【Azure Redis 缓存】Redis 连接失败
    问题描述AzureRedis出现连接失败,过一会儿后,又能自动恢复。 问题解答其实,因为AzureRedis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的......
  • Java 使用JavaMail通过Gmail发送电子邮件
    JavaMail提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API可以方便地执行一些常用的邮件传输。可以基于JavaMail开发出类似于MicrosoftOutlook......
  • qq机器人发送语音 报错:音频转码到amr失败,请确认你的ffmpeg可以处理此转换
    前提基于oicq开发的qq机器人当接收到用户指令后发送请求返回音乐问题在windows上无报错,可正常运行,但在linux上就会出现问题报错内容音频转码到amr失败,请确认你的ffm......
  • 【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形
    问题描述在使用AzureEventHub的SDK时候,常规情况下,发现示例代码中并没有SDK内部的日志输出。因为在Java项目中,没有添加SLF4J依赖,已致于在启动时候有如下提示:SLF4J:Fa......