Не могу установить соединение через веб-сокет на каждой паре в Binance exchange.Io.netty.channel.epoll.LinuxSocket error

Логика моего приложения требует подключения websocet для каждой пары на бирже Binance.

Я пользуюсь этой библиотекой

Я использую три метода для получения данных от обмена:

1.onAggTradeEvent

2.onAllMarketTickersEvent

  1. onDepthEvent

Я создаю только один экземпляр класса BinanceApiWebSocketClient и вызываю методы, описанные выше, в отдельных потоках. Это мой код:

pairs().stream().forEach(pair->{
            wsClient.onDepthEvent(symboltoLowerCase(),orderBookCallback());
        });
pairs().stream().forEach(pair->{
            wsClient.onAggTradeEvent(symbol.toLowerCase(), tradesCallback());
        });
pairs().stream().forEach(pair->{
wsClient.onAllMarketTickersEvent(tickers -> {//some logic here});
        });

Когда я запускаю этот код некоторое время, он работает, но затем веб-сокеты закрываются без каких-либо ошибок. Когда я искал решение для своей проблемы, я обнаружил, что я не только сталкиваюсь с этой проблемой, но и пишу собственный клиент для обмена Binance, используя AsyncHttpClient на основе этого кода

Я инициализирую http-клиент следующим образом:

private AsyncHttpClient client;

    public BinanceWebSocketCustomClient() {
        this.client = HttpUtils.newAsyncHttpClient(new DefaultEventLoopGroup(1000),100,1000);
    }

Я создаю websocket следующим образом:

private Closeable createNewWebSocket(String channel, BinanceWebsocetListener listener){
       String streamingUrl = String.format("%s/%s", BinanceApiConstants.WS_API_BASE_URL, channel);
       AtomicReference<NettyWebSocket> websocetReference = new AtomicReference<>();
       try {
           NettyWebSocket nettyWebSocket = client.prepareGet(streamingUrl).execute(new WebSocketUpgradeHandler.Builder()
                   .addWebSocketListener(listener).build()).get();
           websocetReference.set(nettyWebSocket);
       } catch (InterruptedException | ExecutionException e) {
           LOG.error("create new websocet",e);
       }
       return () -> {
           final int code = 1000;
           listener.onClose(websocetReference.get(),code,null);
           websocetReference.get().onClose(1000,null);
       };
   }

Я повторно использую методы обратного вызова библиотеки binance

public Closeable onAggTradeEvent(String symbol, BinanceApiCallback<AggTradeEvent> callback) {
        final String channel = String.format("%s@aggTrade", symbol);
        return createNewWebSocket(channel, new BinanceWebsocetListener<>(callback, AggTradeEvent.class));
    }

Но когда я запускаю этот код, я получаю сообщение об ошибке:

java.net.ConnectException: Не удалось инициализировать класс io.netty.channel.epoll.LinuxSocket в org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:179) в org.asynchttpclient.netty.hannel.Net 1channel.onFailure(NettyChannelConnector.java:108) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28) в org.asynchttpclient.netty.Simple.hannelFutureLomplet.DefaultPromise.notifyListener0(DefaultPromise.java:511) по адресу io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) по адресу io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise) io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) в io.netty.channel.DefaultChannelPromise.addListener nelPromise.java:30) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java.ynch.net org или gt) atch..channel.NettyChannelConnector.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.tify по умолчанию Promise.tify.java:424) на io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) на io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) на io.netty.channel.DefaultChannelP omise.addListener(DefaultChannelPromise.java:30) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect:jj или atj в NettyC.asynchttpclient.netty.channel.NettyChannelConnector 20) на io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) на io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) на io.netty.util.concurrent.DefaultP.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) в io. etty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.asynchttplient.netty.channelConhan.Clan.ChanttyCantCtyNC (). 69) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:106) по адресу org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete (SimpleChannelFutureListener.ttpliteFylementListenSyntyListenSyntyListenSyntyliPyntliyClientSyntylientSyntyPlientSyntyPlientSyntservice) SimpleChannelFutureListener.java:20) в io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) в io.net.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener (DefaultCh annelPromise.java:95) по адресу io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.ync..NettyChannelConnector.connect(NettyChannelConnector.java:69) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:106) по адресу org.asynchttpclient.netty.SimpleChannelo..asynchttpclient.netty.SimpleChannelFutureListener.: 485) в io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannel Promise.addListener (DefaultChannelPromise.java:95) по адресу io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect0 (nettyChannelynch) atj..netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) на org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:106) на org.asynchttpclient.netty.o 28) в org.asynchttpclient.netty.SimpleChannelFutureListener. (DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) при io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0 (NettyChannelConnector.java:82. (SimpleChannelFutureListener.java:28) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:20) в io.netty.util.concurrent.DefaultPromise.notifyListener0 (по умолчанию. concurrent.DefaultPromise.notifyListenersNow (DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener (D) efaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) в io.netty.channel.DefaultChannelPromise.addListener (DefaultChannelPromise.java:30.net). org.asynneltyhanliClientClintClintClientClintClintClintClintClintClientClint.connect0 (NettyChannelConnector.java:82) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) в org.asynchttpclient.netty.channel.NettyChannelConnector $ 1.onFailure6 (attyChan).asynchttpclient.netty.SimpleChannelFutureListener.) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.access$000 000 (DefaultPromise.java:33) в io.netty.util.concurrent.DefaultPromise$1.run(DefaultPromise.java:435) в io.netty.util.concurrent.GlobalEventExecutor$TaskRunner.run(GlobalEventExecutor.java:248) в io.netty.util.concurrent.FastThreadLocalRunnable.run:30 FastThunnable.run:30) в java.lang.Thread.run(Thread.java:748) Причина: java.lang.NoClassDefFoundError: Не удалось инициализировать класс io.netty.channel.epoll.LinuxSocket в io.netty.channel.epoll.EpollSocketChannel.(EpollSocketChannel.java:45) в org.asynchttpclient.netty.channel.EpollSocketChannelFactory.newChannel(EpollSocketChannelFactory.java:23) в org.asynchttpclient.netty.channel.EpollSocketCact.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:320) по адресу io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:163) по адресу io.netty.bootstrap.Bootstrap.connect(Bootstrapnt.jpg) или netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:81) ... 77 общих кадров tted ОШИБКА BinanceWebSocetCustomClient [BinanceWebSocetCustomClient.java:68] создайте новый веб-сценарий java.util.concurrent.ExecutionException: java.net.ConnectException: не удалось инициализировать класс io.netty.channel.epoll.Linuxurt(CompletableFuture.java:357) по адресу java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895) по адресу org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:202) в exchange.binanceBecountBecount BinanceWebSocetCustomClient.java:65) на exchange.binance.BinanceWebSocetCustomClient.onAggTradeEvent(BinanceWebSocetCustomClient.java:48) на exchange.Exchange.main(Exchange.java:74), вызванный: java.net.ConnectException Исключение: класс:.channel.epoll.LinuxSocket в org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:179) в org.asynchttpclient.netty.channel.NettyChannelConnector $ 1.onFailure (NettyChannelCon ector.java:108) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete:.20.notifyListener0 (DefaultPromise.java:511) на io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) на io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424 at) netty.util.concurrent.DefaultPromise.addListener (DefaultPromise.java:162) по адресу io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) по адресу io.netty.channel.DefaultChannelPromise.addLavajromPromise.addLavajromer. на сайте org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) на сайте org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) на сайте org.asynchnelChannelChannel $ 1.onFailure (NettyChannelConnector.java:106) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28) в org.asynchttpclient.netty.SimpleChannelFort.jpleLo.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.notifyListeners:Pize) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) в io.netty.channel.DefaultChannelPromise.adListen Java: 30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) в org.ync. channel.NettyChannelConnector netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) по адресу io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) по адресу io.netty.util.concurrent.DefaultPromise.Playise.Poise. Java: 424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) в io.netty.channel.DefaultChannelLiseise (DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) в org.asynchttpclient.netty.channel.NettyChannelConnector Java: 20) в io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) по адресу io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) по адресу io.netty.channel.DefaultChannelPromise.addListener (DefaultChannelPromise) jo.NETty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.asynchttplient.netty.channel.Connect.hannel.Net ttyChannelConnector.java:69) в org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:106) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete:lich.jp. SimpleChannelFutureListener.operationComplete (SimpleChannelFutureListener.java:20) по адресу io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) по адресу io.netty.util.concurrent.DefaultPromise.noj485.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) в io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) в io.netty.channel.DefaultChannelPromise.addavaer (Default): 95) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org.asynchttpchannel.net. tyChannelConnector.connect (NettyChannelConnector.java:69) в org.asynchttpclient.netty.channel.NettyChannelConnector$1.onFailure(NettyChannelConnector.java:106) в org.asynchttpclient.netty.SimpleChannelFutureLjplete asynchttpclient.netty. 485) по адресу io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) по адресу io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:162) по адресу io.netty.channel.DefaultChannelLromister.ad (DefaultChannelPromise.java:95) в io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) в org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:82) в org chttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) на сайте org.asynchttpclient.netty.channel.NettyChannelConnector: 28) в org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:20) по адресу io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511) на io.net. notifyListenersNow (DefaultPromise.java:485) на io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424) на io.netty.util.concurrent.DefaultPromise.addListener (DefaultPromise.java:16ty) в io.channel.DefaultChannelPromise.addListener (DefaultChannelPromise.java:95) по адресу io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.Cont ность ChanC NetConnectCanConeCnector0 onnector.java:82) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect(NettyChannelConnector.java:69) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector $ 1.onFailure (NettyChannelConnector.javatynent.cht: at6). at6) netty.SimpleChannelFutureListener.operationComplete (SimpleChannelFutureListener.java:28) по адресу org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:20) по адресу io.nettyise.ero.pile.netty.util.concurrent.DefaultPromise.notifyListenersNow (DefaultPromise.java:485) в io.netty.util.concurrent.DefaultPromise.access$000(DefaultPromise.java:33) в io.netty.util.concurrent.DefaultPromise $ 1.run (DefaultPromise.java:435) в io.netty.util.concurrent.GlobalEventExecutor$TaskRunner.run(GlobalEventExecutor.java:248) в io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.jun. Java. lang.Thread.run (Thread.java:748) Причина: java.lang.NoClassDefFoundError: Не удалось инициализировать класс io.netty.channel.epoll.LinuxSocket в io.netty.channel.epoll.EpollSocketChannel.(EpollSocketChannel.java:45) в org.asynchttpclient.netty.hancketChannelChanE EpollSocketChannelFactory.java:23) в org.asynchttpclient.netty.channel.EpollSocketChannelFactory.newChannel(EpollSocketChannelFactory.java:19) в io.netty.bootstrap.AbstractBootstrap.pootstraptrab.trab.trab.doResolveAndConnect (Bootstrap.java:163) по адресу io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:156) по адресу org.asynchttpclient.netty.channel.NettyChannelConnector.connect0(NettyChannelConnector.java:81) кадры опущены

Может быть, я настраиваю http-клиент ненадлежащим образом?

0 ответов

Другие вопросы по тегам