以太坊中web3j调用公链超时问题,重构httpservice即可
在学习使用java集成web3j调用eth公链出现以下问题:SocketTimeoutException异常,具体的异常错误就不截图了,主要是执行下面代码发送的
Web3j.build(new HttpSerivceEx(ApplicationConfig.gethUrl)).ethSendRawTransaction(hexValue).send();
此代码主要是进行发送离线交易,由于返回了超时异常,然后系统认为此次交易失败了。然后实际上此笔交易真实的情况是已经发出了,只是此次请求的时间到了,导致了并未接受到正确的返回,因此就会丢失此次交易的hashId。
这个时候只能去反编译看代码,发现web3j发送请求实际是用的okhttp3的方式,并且默认的超时时间是10s,这个在网络环境非常复杂的公链环境无法满足需求,因此考虑重新构建发送的okhttp3的属性。所以重写下Httpservice即可如下:
public class HttpSerivceEx extends HttpService {
然后在创建okhttpclient时设定请求超时时间即可
private static OkHttpClient createOkHttpClient() {OkHttpClient.Builder builder = new OkHttpClient.Builder();configureLogging(builder);MyOkHttpRetryInterceptor myOkHttpRetryInterceptor = new MyOkHttpRetryInterceptor.Builder().executionCount(3).retryInterval(1000).build();builder.addInterceptor(myOkHttpRetryInterceptor);builder.retryOnConnectionFailure(true);log.info("---------设置超时时间--------{}秒",120);builder.connectionPool(new ConnectionPool()).connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS).build();return builder.build();}
上述还设定了超时自动重发的机制,实际的生产环境是没有的,因为eth的nonce机制,重发并没有什么意义。
以太坊中web3j调用公链超时问题,重构httpservice即可相关推荐
- 谁能成为真正的「以太坊Killer」?公链aelf准备从经济模型入手
由于底层技术差异不大,许多公链在基础设施建设.性能标新.以及跨链互操作等方面的实力并没有太多距离.因此,如果想在公链赛道上胜出,成为真正的「以太坊Killer」,就需要「另辟蹊径」从经济模式上入手,继 ...
- 区块链开发(十五)以太坊中的Events和Logs解析及用途
以太坊中的事件(Events)和日志(Logs)是个特别让人困惑的概念,本文帮大家梳理. 因为上篇文章,我们讨论过以太坊go-ethereum客户端查询交易列表的一些办法,这篇文章,我们具体实现一种f ...
- 区块链学习笔记16——以太坊中的交易树和收据树
十六.以太坊中的交易树和收据树 每次发布一个交易的时候,那些交易会组织成一个交易树,也是一颗Merkle tree跟比特币中的情况是类似的,同时以太坊还增加了一个收据树,每个交易执行完之后会形成一个收 ...
- 04.区块链的那些事儿-以太坊中的 Patricia Tree
本节主要讨论以太坊中存储的 Patricia Tree 比特币只有1棵Merkle树,而以太坊的每一个区块头,并非只包含1棵Merkle Tree,而是包含了3棵Merkle Tree,分别对应了三种 ...
- 从2018年以太坊统计数据看区块链发展趋势
今年6月,我们发布了"以太坊网络状态",重点介绍了整个网络的一些关键数据和统计数据.六个月后,即将在2018年结束时,我们处于长期"加密货币冬天"的尾声,201 ...
- 以太坊中的账户、交易、Gas和区块Gas Limit等基本概念
本篇文章作为科普文章,汇总整理了以太坊中的账户.交易.Gas和区块Gas Limit等相关概念,以便大家在实践中更好的与具体业务相结合. 什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又 ...
- 以太坊(Ethereum) - Ganache本地区块链
章节 以太坊(Ethereum) – 是什么 以太坊(Ethereum) – 什么是智能合约 以太坊(Ethereum) – 以太币 以太坊(Ethereum) – 虚拟机(E.V.M.) 以太坊(E ...
- 以太坊中gas、gasPrice、gasLimit是什么?
1. 什么是gas? gas是"燃料"的意思.在以太坊区块链上实现了一个EVM(以太坊虚拟机)的代码运行环境,在链上执行写入操作时,网络中的每个全节点都会进行相同的计算并存储相同的 ...
- 什么是以太坊,它是区块链2.0的代表,它又什么特点?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 以太坊 是一种全球共享计算,是各种分散应用程序的基础.它有一个独立于比特币的独立区块链,但与之类似.以太坊的区块链有显着 ...
最新文章
- 生成allure测试报告时报错的解决方法
- java lists 引用包,在线等java【不在同一类,同一个包的两个LIst可以实现复制么?怎...
- jQuery图片上传前先在本地预览(不经过后端处理)
- 2019中山大学程序设计竞赛
- 微信小程序实现滚动到指定位置
- c语言双引号和单引号的区别
- 程序员基本功04JAVA的内存回收
- ROC和AUC介绍以及如何计算AUC
- linux mysql 系统时间函数吗_Linux 宝库 - Mysql日期和时间函数不求人
- 最大计算机病毒诈骗怎么发生,又是怎么被制止的
- PTA22、最小乘积(基本型) (10 分)
- 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
- Algs4-1.3.10中序表达式转为后序表达式(第二次实现)
- JavaScript中的Array.prototype.slice.call()方法学习
- html创建表格没有网格线,excel里面的电子表格没有了网格线如何解决?
- programData
- 考拉海购操作教学-API接口
- Cy5-MAL,Cy5-马来酰亚胺,1437796-65-0,1437872-46-2
- 判断两个向量是否平行
- python程序员用什么电脑好_程序员写代码用什么电脑好,前辈们推荐一下哈?