开发者社区> 寻剑> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Tablestore的SDK如何配置自定义重试

简介: 当我们的应用服务遇到网络抖动、服务端进行分区分裂等问题时候,会出现请求超时或者失败。Tablestore的SDK里默认配置支持一些基本的重试逻辑,但是并不能满足所有业务,因此这里介绍一下常见语言的SDK中如何自定义进行重试。JAVA构造Client,传入指定的重试策略。ClientConfiguration clientConfiguration = new ClientConfiguration
+关注继续查看

当我们的应用服务遇到网络抖动、服务端进行分区分裂等问题时候,会出现请求超时或者失败。Tablestore的SDK里默认配置支持一些基本的重试逻辑,但是并不能满足所有业务,因此这里介绍一下常见语言的SDK中如何自定义进行重试。

JAVA

构造Client,传入指定的重试策略。

ClientConfiguration clientConfiguration = new ClientConfiguration();
RetryStrategy retryStrategy = new AlwaysRetryStrategy(10, 1000);
clientConfiguration.setRetryStrategy(retryStrategy);
SyncClient client = new SyncClient("endpoint", "accessId", "accessKey", "instanceName", clientConfiguration);

默认的重试策略,写入操作是不会进行重试的,如果写入也是幂等的,那么可以使用如上所示的AlwaysRetryStrategy重试策略,指定最大重试次数和最大重试间隔(重试间隔会指数增长到最大重试间隔)即可。

当然还可以自定义重试策略:只需要实现RetryStrategy接口即可,自己通过判断action和Exception类型,可以实现哪些异常进行重试,哪些API可以进行重试,具体可以参考RetryStrategy的源码说明以及DefaultRetryStrategy中的实现逻辑

GO

  1. 设置网络相关的一些参数
  2. 实现自定义重试函数。可以根据errorCode、errorMsg、action、httpStatus等信息判断要不要进行重试。
  3. 在构造好client后设置该client的重试策略。
// 设置网络相关的一些参数
var myConfig = &tablestore.TableStoreConfig{
	RetryTimes: 10,
	HTTPTimeout: tablestore.HTTPTimeout{
		ConnectionTimeout: time.Second * 15,
		RequestTimeout:    time.Second * 60},
	MaxRetryTime:       time.Second * 10,
	MaxIdleConnections: 2000,
}


// 自定义重试函数
func MyRetryFunc(errorCode string, errorMsg string, action string, httpStatus int) bool {
	// 如果想要所有都重试,直接返回true
	if strings.Contains(errorCode, "OTSOperationConflict") || strings.Contains(action, "Search") || strings.Contains(action, "PutRow") {
		return true
	}
	return false
}

// 构造自己的client
func newMyClient(endpoint string, instanceName string, accessKeyId string, accessKeySecret string) *tablestore.TableStoreClient {
	var myClient = tablestore.NewClientWithConfig(endpoint, instanceName, accessKeyId, accessKeySecret, "", myConfig)
	myClient.CustomizedRetryFunc = MyRetryFunc
	return myClient
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
94 0
自顶向下学习 RocketMQ(十):消息重投和消息重试
生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway 没有任何保证。消息重投保证消息尽可能发送成功、不丢失,但可能会造成消息重复,消息重复在 RocketMQ 中是无法避免的问题。消息重复在一般情况下不会发生,当出现消息量大、网络抖动,消息重复就会是大概率事件。另外,生产者主动重发、consumer 负载变化也会导致重复消息。
366 0
从 0 到 1 通过 Flink + Tablestore 进行大数据处理与分析
阿里云实时计算Flink版是一套基于 Apache Flink 构建的⼀站式实时大数据分析平台。在大数据场景下,实时计算 Flink 可提供端到端亚秒级实时数据流批处理能力。表格存储 Tablestore (又名 OTS)是阿里云自研的多模型结构化数据存储,可提供海量结构化数据的存储、查询分析服务。表格存储的双引擎架构支持千万TPS和毫秒级延迟的服务能力,可作为大数据计算的极佳上下游存储。
604 0
从 0 到 1 通过 Flink + Tablestore 进行大数据处理与分析
阿里云实时计算 Flink 版是一套基于 Apache Flink 构建的⼀站式实时大数据分析平台。在大数据场景下,实时计算 Flink 可提供端到端亚秒级实时数据流批处理能力。表格存储 Tablestore (又名 OTS)是阿里云自研的多模型结构化数据存储,可提供海量结构化数据的存储、查询分析服务。表格存储的双引擎架构支持千万TPS和毫秒级延迟的服务能力,可作为大数据计算的极佳上下游存储。
218 0
使用 Canal 向 Tablestore 导入数据
可以使用 Canal 将数据传输进入 Tablestore。需要部署两部分内容,首先部署 canal.deployer,deployer 负责从上游拉取 binlog 数据,记录位点等。然后再部署 canal.adapter 包,这个服务负责对接 deployer 解析过的数据,并且将数据传输到下游数据库中,在本文中即 Tablestore 数据库。链路如图。Deployer部署部署步骤首先部署 
183 0
如何在Spring生态中玩转RocketMQ?
RocketMQ作为业务消息的首选,在消息和流处理领域被广泛应用。而微服务生态Spring框架也是业务开发中最受欢迎的框架,两者的完美契合使得RocketMQ成为Spring Messaging实现中最受欢迎的消息实现。本文展示了5种在Spring生态中文玩转RocketMQ的方式,并描述了每个项目的特点和使用场景。文末可以直达在线体验。
3472 0
使用EMR SQL 批处理Tablestore
通过在E-MapReduce集群中使用Spark SQL访问表格存储。对于批计算,Tablestore on Spark提供索引选择、分区裁剪、Projection列和Filter下推、动态指定分区大小等功能,利用表格存储的全局二级索引或者多元索引可以加速查询。 ## 前提条件 - 已创建E-MapReduce Hadoop集群。具体操作,请参见[创建集群](https://help.al
224 0
IoT+Tablestore快速构建智能售货机应用
### 一、 背景介绍         近年来,物联网(IoT)技术发生了巨大的变化。NB-IoT、LoRa等技术的产生解决了网络覆盖、设备功耗成本问题;尤其是最近5G技术的商用,意味着支持海量设备连接进行高质量数据通讯即将有坚实的基础设施支持。
2032 0
TableStore多元索路由探微
多元索引会分布式地将数据打散存储在不同机器上。通过指定路由,您可以有的放矢地定向搜索,在指定的一个数据分区上执行查询,而不是所有数据分区,有效提升了查询吞吐量,减少长尾对延迟的影响。本文抽丝剥茧,介绍分布式模型中路由的原理,如何使用路由来加速查询。
1538 0
+关注
14
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载