V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  以太坊

Magician-Web3 1.0.5 发布啦,加入了负载均衡 和 重试策略

  •  
  •   Joker123456789 · 2022-11-25 19:18:18 +08:00 · 1383 次点击
    这是一个创建于 714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Magician-Web3 是一个区块链开发工具包。它由两个功能组成。一个是扫描区块链,根据开发者的需要监控交易。另一个是对 web3j 的一些二次打包,可以减少开发者在一些常见场景下的工作量。它计划支持三种链,ETH ( BSC 、POLYGAN 等)、SOL 和 TRON

    本次更新的点

    1. 加入了负载均衡,只要配置多个 RPC URL 即可自动轮询,可以将流量分散给多个节点,不用一直盯着一个节点 “祸害了”

    2. 加入了重试策略,当出现了某些意外的原因 导致区块被跳过扫描,那么被跳过的区块高度将进入重试策略,你可以自己进行处理

    3. 修改了一点点细节

    负载均衡

    直接设置多个 rpc 地址即可

    MagicianBlockchainScan.create()
                        .setRpcUrl(
                                // 可以设置 1 到 n 个 rpc 地址了,超过一个将自动轮询使用
                                EthRpcInit.create()
                                        .addRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545")
                                        .addRpcUrl("https://data-seed-prebsc-2-s1.binance.org:8545")
                                        .addRpcUrl("https://data-seed-prebsc-1-s2.binance.org:8545")
                        )
                        .setScanPeriod(1000)
                        .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue())
                        .addEthMonitorEvent(new EventOne())
                        .addEthMonitorEvent(new EventThree())
                        .setRetryStrategy(new EthRetry())
                        .start();
    

    重试策略

    在符合以下两个条件时,会触发重试策略,两个条件必须全都符合 才会触发重试

    1. 当前正在扫描的块高 是空的(块不存在 或者 块里面没交易)

    2. 当前正在扫描的块高 < 链上的最新块高

    当上面两个条件同时符合的时候,扫描任务会跳过这个块,然后继续扫描下一个块,同时 重试策略会收到被跳过的块高, 你可以在重试策略里 自己处理

    创建一个重试策略

    public class EthRetry implements RetryStrategy {
    
        @Override
        public void retry(BigInteger blockNumber) {
            
        }
    }
    

    将重试策略添加到扫描任务中

    MagicianBlockchainScan.create()
            .setRetryStrategy(new EthRetry())// 调用这个方法添加
            .start();
    

    需要注意线程数量的配置

    如果你此时开了一个扫块任务 + 一个 重试策略,那么需要占用两个线程,所以参数必须传 2

    // 初始化线程池,核心线程数必须 >= 扫块的任务数量 + 重试策略的数量
    EventThreadPool.init(2);
    

    细节调整

    1. 扫描频率最低可以设置 500 毫秒

    2. 设置 RPC 地址的 传参类型变了

    3. 由于第二点的优化,现在可以根据 RPC 地址的类型来判断你要扫描什么链了,所以去除了 ChainType 的设置

    MagicianBlockchainScan.create()
                        .setRpcUrl(// 这里发生了改变
                                EthRpcInit.create()
                                        .addRpcUrl("https://data-seed-prebsc-1-s1.binance.org:8545")
                                        .addRpcUrl("https://data-seed-prebsc-2-s1.binance.org:8545")
                                        .addRpcUrl("https://data-seed-prebsc-1-s2.binance.org:8545")
                        )
                        .setScanPeriod(1000)// 这个参数最低可以设置为 500 了
                        .setBeginBlockNumber(BlockEnums.LAST_BLOCK_NUMBER.getValue())
                        .addEthMonitorEvent(new EventOne())
                        .addEthMonitorEvent(new EventThree())
                        .setRetryStrategy(new EthRetry())
                        .start();
    

    可以访问官网了解更多:https://magician-io.com

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.