xiaoyong931011
2023-03-24 029831451b29a13fe9c42164d5a7b7f9032b6188
src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
@@ -158,7 +158,7 @@
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        WebSocketService ws = null;
        try{
            WebSocketClient webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
            WebSocketClient webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/fcb1ae31845147dcabb183db57336218"));
            ws = new WebSocketService(webSocketClient, true);
            ws.connect();
            Web3j web3j = Web3j.build(ws);
@@ -171,16 +171,22 @@
            Disposable subscribe = eventFlowable.observeOn(Schedulers.from(executor))
                    .subscribe(event::compile, error -> {
                        log.error("币安监听异常", error);
                        // 异常情况下,递归重试连接和订阅
                        int retries = 3;
                        while (retries-- > 0) {
                            try {
                                Thread.sleep(1000);
                                wssContractEventListener(startBlock, event, type);
                                return;
                            } catch (Exception ex) {
                                log.error("币安监听异常", ex);
                        error = error.getCause();
                        if (error instanceof WebsocketNotConnectedException) {
                            log.error("WebSocket连接已断开,正在尝试重新连接...");
                            // 异常情况下,递归重试连接和订阅
                            int retries = 3;
                            while (retries-- > 0) {
                                try {
                                    Thread.sleep(1000);
                                    wssContractEventListener2(startBlock, event, type);
                                    return;
                                } catch (Exception ex) {
                                    log.error("币安监听异常", ex);
                                }
                            }
                        } else {
                            log.error("币安监听异常", error);
                        }
                    });
@@ -192,6 +198,17 @@
                subscribe.dispose();
            } catch (InterruptedException e) {
                e.printStackTrace();
                // 将递归重试连接和订阅改为有限次数的重试,避免出现无限递归的情况
                int retries = 3;
                while (retries-- > 0) {
                    try {
                        Thread.sleep(1000);
                        wssContractEventListener2(startBlock, event, type);
                        return;
                    } catch (Exception ex) {
                        log.error("币安监听异常", ex);
                    }
                }
            }
        } catch (Exception e) {
            log.error("币安监听异常", e);
@@ -201,7 +218,7 @@
            while (retries-- > 0) {
                try {
                    Thread.sleep(1000);
                    wssContractEventListener(startBlock, event, type);
                    wssContractEventListener2(startBlock, event, type);
                    return;
                } catch (Exception ex) {
                    log.error("币安监听异常", ex);
@@ -220,7 +237,7 @@
        Web3j web3j = null;
        try {
            webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
            webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/fcb1ae31845147dcabb183db57336218"));
            ws = new WebSocketService(webSocketClient, true);
            ws.connect();
            web3j = Web3j.build(ws);