在学习使用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即可相关推荐

  1. 谁能成为真正的「以太坊Killer」?公链aelf准备从经济模型入手

    由于底层技术差异不大,许多公链在基础设施建设.性能标新.以及跨链互操作等方面的实力并没有太多距离.因此,如果想在公链赛道上胜出,成为真正的「以太坊Killer」,就需要「另辟蹊径」从经济模式上入手,继 ...

  2. 区块链开发(十五)以太坊中的Events和Logs解析及用途

    以太坊中的事件(Events)和日志(Logs)是个特别让人困惑的概念,本文帮大家梳理. 因为上篇文章,我们讨论过以太坊go-ethereum客户端查询交易列表的一些办法,这篇文章,我们具体实现一种f ...

  3. 区块链学习笔记16——以太坊中的交易树和收据树

    十六.以太坊中的交易树和收据树 每次发布一个交易的时候,那些交易会组织成一个交易树,也是一颗Merkle tree跟比特币中的情况是类似的,同时以太坊还增加了一个收据树,每个交易执行完之后会形成一个收 ...

  4. 04.区块链的那些事儿-以太坊中的 Patricia Tree

    本节主要讨论以太坊中存储的 Patricia Tree 比特币只有1棵Merkle树,而以太坊的每一个区块头,并非只包含1棵Merkle Tree,而是包含了3棵Merkle Tree,分别对应了三种 ...

  5. 从2018年以太坊统计数据看区块链发展趋势

    今年6月,我们发布了"以太坊网络状态",重点介绍了整个网络的一些关键数据和统计数据.六个月后,即将在2018年结束时,我们处于长期"加密货币冬天"的尾声,201 ...

  6. 以太坊中的账户、交易、Gas和区块Gas Limit等基本概念

    本篇文章作为科普文章,汇总整理了以太坊中的账户.交易.Gas和区块Gas Limit等相关概念,以便大家在实践中更好的与具体业务相结合. 什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又 ...

  7. 以太坊(Ethereum) - Ganache本地区块链

    章节 以太坊(Ethereum) – 是什么 以太坊(Ethereum) – 什么是智能合约 以太坊(Ethereum) – 以太币 以太坊(Ethereum) – 虚拟机(E.V.M.) 以太坊(E ...

  8. 以太坊中gas、gasPrice、gasLimit是什么?

    1. 什么是gas? gas是"燃料"的意思.在以太坊区块链上实现了一个EVM(以太坊虚拟机)的代码运行环境,在链上执行写入操作时,网络中的每个全节点都会进行相同的计算并存储相同的 ...

  9. 什么是以太坊,它是区块链2.0的代表,它又什么特点?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 以太坊 是一种全球共享计算,是各种分散应用程序的基础.它有一个独立于比特币的独立区块链,但与之类似.以太坊的区块链有显着 ...

最新文章

  1. 生成allure测试报告时报错的解决方法
  2. java lists 引用包,在线等java【不在同一类,同一个包的两个LIst可以实现复制么?怎...
  3. jQuery图片上传前先在本地预览(不经过后端处理)
  4. 2019中山大学程序设计竞赛
  5. 微信小程序实现滚动到指定位置
  6. c语言双引号和单引号的区别
  7. 程序员基本功04JAVA的内存回收
  8. ROC和AUC介绍以及如何计算AUC
  9. linux mysql 系统时间函数吗_Linux 宝库 - Mysql日期和时间函数不求人
  10. 最大计算机病毒诈骗怎么发生,又是怎么被制止的
  11. PTA22、最小乘积(基本型) (10 分)
  12. 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
  13. Algs4-1.3.10中序表达式转为后序表达式(第二次实现)
  14. JavaScript中的Array.prototype.slice.call()方法学习
  15. html创建表格没有网格线,excel里面的电子表格没有了网格线如何解决?
  16. programData
  17. 考拉海购操作教学-API接口
  18. Cy5-MAL,Cy5-马来酰亚胺,1437796-65-0,1437872-46-2
  19. 判断两个向量是否平行
  20. python程序员用什么电脑好_程序员写代码用什么电脑好,前辈们推荐一下哈?

热门文章

  1. 如何打开sqllite的.db文件方法
  2. 【疯壳·平板教程1】手把手教你做平板电脑-Linux 引导过程
  3. 英伟达NVIDIA JETSON新品推出Jetson Orin NX
  4. AutoMake构建
  5. 卖家需掌握的速卖通运营思路
  6. java markdown转word_怎么把word转成markdown
  7. 听说 DNS 根服务器只有13台,科学吗?
  8. STT-MRAM存储器技术结构图
  9. VScode中文显示出现方框的解决办法
  10. 智慧政务大厅解决方案(附PPT下载)