From 029831451b29a13fe9c42164d5a7b7f9032b6188 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 24 Mar 2023 11:45:22 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java |   41 +++++++++++++++++++++++++++++------------
 1 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java b/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
index 62faeb7..295e271 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
+++ b/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);

--
Gitblit v1.9.1