package project.monitor.erc20.service.internal;
|
|
import java.util.Date;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import org.web3j.protocol.Web3j;
|
import org.web3j.protocol.http.HttpService;
|
|
import kernel.util.DateUtils;
|
import kernel.util.StringUtils;
|
import project.monitor.erc20.service.Erc20RemoteService;
|
import project.monitor.erc20.service.Erc20Service;
|
|
public class Erc20HighRateServiceImpl extends Erc20ServiceImpl implements Erc20Service, Erc20RemoteService {
|
/**
|
* 缓存轮询使用
|
*/
|
private AtomicInteger atomicInteger = new AtomicInteger();
|
|
private String eth_node = null;
|
/**
|
* syspara 60秒重读
|
*/
|
private Date sysparaLast;
|
|
public Web3j buildWeb3j() {
|
if (sysparaLast == null || DateUtils.addSecond(sysparaLast, 60).before(new Date())
|
|| StringUtils.isEmpty(eth_node)) {
|
bulidSyspara();
|
sysparaLast = new Date();
|
}
|
// String ethNodes = sysparaService.find("eth_node").getValue();
|
String[] nodes = eth_node.split(",");
|
String ethNode = "";
|
if (nodes.length == 1) {
|
ethNode = nodes[0];
|
} else {
|
try {
|
if (atomicInteger.get() >= nodes.length) {
|
atomicInteger.set(0);
|
}
|
ethNode = nodes[atomicInteger.getAndIncrement()];
|
} catch (Exception e) {
|
atomicInteger.set(0);
|
ethNode = nodes[0];
|
}
|
}
|
|
Web3j web3j = Web3j.build(new HttpService(ethNode));
|
return web3j;
|
}
|
|
private void bulidSyspara() {
|
eth_node = sysparaService.find("eth_high_rate_node").getValue();
|
percent = sysparaService.find("gas_limit_add_percent").getDouble();
|
}
|
|
}
|