以太坊中web3j调用公链超时问题,重构httpservice即可

在使用web3j进行Java集成以太坊公链操作时遇到SocketTimeoutException异常,原因是默认请求超时时间为10s,不适应复杂网络环境。解决方案是通过自定义OkHttpClient,设置更长的请求超时时间和重试机制,但实际生产环境中由于nonce机制,重发并不适用。
摘要由CSDN通过智能技术生成

         在学习使用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()
           
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值