Интеграция Spring (IntegrationFlowContext): динамическая регистрация новых путей к одному серверу веб-сокетов - PullRequest
1 голос
/ 26 февраля 2020

Я пытался реализовать весеннее решение websocket с JavaDsl, перейдя по ссылке т.е. https://github.com/joshlong/techtips/tree/master/examples/spring-integration-4.1-websockets-example

И я успешно протестировал его, подписавшись на путь (т.е. / messages) с моим клиент stomp.

Затем я попытался сделать то же самое, зарегистрировав поток интеграции в IntegrationFlowContext.

Он успешно выполнен на стороне сервера, но когда я попытался сделать запрос своим ударом клиент получил исключение 404. Не найдено.

При просмотре журналов я обнаружил, что ранее «AbstractHandlerMapping» отображался на SockJsHttpRequestHandler , а теперь отображается на ResourceHttpRequestHandler

С потоком интеграции под управлением Spring (успешно)

DEBUG [http-nio-8081-exec-1] o.s.c.l.LogFormatUtils: GET "/messages/websocket", parameters={}
DEBUG [http-nio-8081-exec-1] o.s.w.s.h.AbstractHandlerMapping: Mapped to org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler@46185a1b
DEBUG [http-nio-8081-exec-1] o.s.w.s.s.s.AbstractSockJsService: Processing transport request: GET http://localhost:8081/messages/websocket
DEBUG [http-nio-8081-exec-1] o.s.w.s.FrameworkServlet: Completed 101 SWITCHING_PROTOCOLS
DEBUG [http-nio-8081-exec-1] o.s.w.s.h.LoggingWebSocketHandlerDecorator: New StandardWebSocketSession[id=e11b5ef5-d2e5-e5c7-819d-493f42f4a7c8, uri=ws://localhost:8081/messages/websocket]

И с потоком контекста IntegrationFlow (отказ)

DEBUG [http-nio-8081-exec-1] o.s.c.l.LogFormatUtils: GET "/messages/websocket", parameters={}
DEBUG [http-nio-8081-exec-1] o.s.w.s.h.AbstractHandlerMapping: Mapped to ResourceHttpRequestHandler ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"]
DEBUG [http-nio-8081-exec-1] o.s.w.s.r.ResourceHttpRequestHandler: Resource not found
DEBUG [http-nio-8081-exec-1] o.s.w.s.FrameworkServlet: Completed 404 NOT_FOUND
DEBUG [http-nio-8081-exec-1] o.s.c.l.LogFormatUtils: "ERROR" dispatch for GET "/error", parameters={}
DEBUG [http-nio-8081-exec-1] o.s.w.s.h.AbstractHandlerMapping: Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
DEBUG [http-nio-8081-exec-1] o.s.w.s.m.m.a.AbstractMessageConverterMethodProcessor: Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
DEBUG [http-nio-8081-exec-1] o.s.c.l.LogFormatUtils: Writing [{timestamp=Tue Feb 25 17:06:58 IST 

1 Ответ

0 голосов
/ 26 февраля 2020

У вас другой Mapped to ... из-за getHandler(HttpServletRequest request) logi c в AbstractHandlerMapping:

Object handler = getHandlerInternal(request);
    if (handler == null) {
        handler = getDefaultHandler();
    }
    if (handler == null) {
        return null;
    }
    // Bean name or resolved handler?
    if (handler instanceof String) {
        String handlerName = (String) handler;
        handler = obtainApplicationContext().getBean(handlerName);
    }

    HandlerExecutionChain executionChain = getHandlerExecutionChain(handler, request);

    if (logger.isTraceEnabled()) {
        logger.trace("Mapped to " + handler);
    }

Мы не поддерживаем динамические c WS конечные точки, потому что мы не поддерживаем отсканируйте их во внутреннем WebSocketHandlerMappingFactoryBean.

Не стесняйтесь поднимать вопрос о ГР https://github.com/spring-projects/spring-integration/issues, и мы посмотрим, что мы можем сделать для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...