Помочь с настройкой надежного stomp websocket сервера на Spring Boot
10 000 руб. за проект
Есть три ноды Spring приложения, которые выполняют роль реле между фронтэндом и rabbit-mq кластером.
Под нагрузкой случается такой баг: одна из нод отваливается и перестает отвечать фреймом CONNECTED на фрейм CONNECT. Хотя http запрос на Upgrade успешно уходит и возвращается со 101 статусом.
Когда я гружу сервер нагрузкой (пока просто подключениями и одной подпиской, хотя в реальности подписок больше и в них приходят сообщения), я не могу получить такой же результат, но зато получаю вот такую запись в логах:
Собственно задача - подсказать, как создать и настроить такую систему из нод, чтобы выдерживала желаемую нагрузку.
Версия Spring Boot - 2.1.4
Под нагрузкой случается такой баг: одна из нод отваливается и перестает отвечать фреймом CONNECTED на фрейм CONNECT. Хотя http запрос на Upgrade успешно уходит и возвращается со 101 статусом.
Когда я гружу сервер нагрузкой (пока просто подключениями и одной подпиской, хотя в реальности подписок больше и в них приходят сообщения), я не могу получить такой же результат, но зато получаю вот такую запись в логах:
23:05:12.690 DEBUG 1 --- [io-8082-exec-17] s.w.s.h.LoggingWebSocketHandlerDecorator : Transport error in StandardWebSocketSession[id=bf5ef2ed-93a6-5d38-ccf9-e77d14b7f294, uri=***]
java.io.EOFException: null
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1206) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1140) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:72) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
23:05:12.692 DEBUG 1 --- [io-8082-exec-17] s.w.s.h.LoggingWebSocketHandlerDecorator : StandardWebSocketSession[id=bf5ef2ed-93a6-5d38-ccf9-e77d14b7f294, uri=***] closed with CloseStatus[code=1006, reason=null]
По результатам такого теста обычно большая часть запросов ведет себя именно так: подключается, получает 101 стату, отправляет CONNECT, но CONNECTED не получает.java.io.EOFException: null
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1206) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1140) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:72) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148) ~[tomcat-embed-websocket-9.0.17.jar!/:9.0.17]
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.17.jar!/:9.0.17]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
23:05:12.692 DEBUG 1 --- [io-8082-exec-17] s.w.s.h.LoggingWebSocketHandlerDecorator : StandardWebSocketSession[id=bf5ef2ed-93a6-5d38-ccf9-e77d14b7f294, uri=***] closed with CloseStatus[code=1006, reason=null]
Собственно задача - подсказать, как создать и настроить такую систему из нод, чтобы выдерживала желаемую нагрузку.
Версия Spring Boot - 2.1.4
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.