Я хочу установить WebSocket с помощью AsyncHttpClient.Но в случае ошибки я хочу воссоздать новый WebSocket.Но выполнение этого ниже создает другой поток, и мой предыдущий поток остается открытым и работает (проверил это с помощью Memory Analyzer).Как я могу остановить эту тему?
private static Map<String, Integer> errorNo = new HashMap<String, Integer>();
private static Map<String,CompletableFuture<NettyWebSocket>> completableFutures= new HashMap<String,CompletableFuture<NettyWebSocket>>();
private static final int maxTry = 2;
@Bean
@Scope("prototype")
public CompletableFuture<NettyWebSocket> connect2(String webSocketPath) {
completableFutures.put(webSocketPath,Dsl.asyncHttpClient()
.prepareGet(webSocketPath)
.addHeader("Accept", application_json)
.execute(webSocketUpgradeHandler(webSocketPath))
.toCompletableFuture()
.exceptionally(ex -> {
return null;
}) );
return completableFutures.get(webSocketPath);
}
@Bean
@Scope("prototype")
public WebSocketListener webSocketTextListener(String webSocketPath) {
return new WebSocketListener() {
@Override
public void onOpen(WebSocket websocket) {
logger.info("webSocket opened, path " + websocket.getRemoteAddress() +", " +Thread.currentThread());
}
@Override
public void onClose(WebSocket websocket, int code, String reason) {
logger.info("webSocket closed, path " + websocket.getRemoteAddress());
}
@Override
public void onError(Throwable t){
//i want to close this thread and retry again
errorNo.put(webSocketPath,errorNo.get(webSocketPath)==null?1:errorNo.get(webSocketPath)+1);
logger.info("webSocket error, " +webSocketPath+", error No -"+errorNo.get(webSocketPath));
if(errorNo.get(webSocketPath)<=maxTry) {
logger.info("retrying, " +webSocketPath+", try No-"+errorNo.get(webSocketPath));
context.getBean("connect",webSocketPath);
}
}
@Override
public void onTextFrame(String payload, boolean finalFragment, int rsv) {
}
}
};
}