Диагностика проблем с назначениями пользователей Spring WebSocket

У меня возникли проблемы с работой пользовательских назначений с веб-сокетами Spring STOMP.

Кажется, у меня работает общая конфигурация. Например, следующие работы.

Клиент:

svc.stompClient.subscribe('/queue/messages', msg );

Сервер:

stompTemplate.convertAndSend("/queue/messages", msg);

Однако, когда я пытаюсь отправить в определенное место назначения пользователя следующим образом:

Клиент:

svc.stompClient.subscribe('/user/queue/messages', msg );

Сервер:

stompTemplate.convertAndSendToUser(username, "/queue/messages", msg);

... кажется, ничего не происходит.

Я настроил прослушиватели SessionConnectedEvent и SessionSubscribeEvent, которые показывают:

SessionConnectedEvent[GenericMessage [
    payload=byte[0], 
    headers={
        simpMessageType=CONNECT_ACK, 
        simpConnectMessage=GenericMessage [
            payload=byte[0], 
            headers={
                simpMessageType=CONNECT, 
                stompCommand=CONNECT, 
                nativeHeaders={
                    accept-version=[1.1,1.0], 
                    heart-beat=[10000,10000]
                }, 
                simpSessionAttributes={}, 
                simpSessionId=erlz0dm6
            }
        ], 
        simpSessionId=erlz0dm6
    }
]]

SessionSubscribeEvent[GenericMessage [
    payload=byte[0], 
    headers={
        simpMessageType=SUBSCRIBE, 
        stompCommand=SUBSCRIBE, 
        nativeHeaders={
            id=[sub-0], 
            destination=[/user/queue/messages]
        }, 
        simpSessionAttributes={}, 
        simpSubscriptionId=sub-0, 
        simpSessionId=erlz0dm6, 
        simpDestination=/user/queue/messages
    }
]]

И на стороне клиента я вижу следующее:

 >>> SUBSCRIBE
id:sub-0
destination:/user/queue/messages

Проследив путь через метод sendToUser, я вижу, что он передает /user/myusername/queue/messages целевому преобразователю. Однако на сервере больше ничего не регистрируется, и клиент не получает сообщение.

Итак, я стремлюсь определить:

  • Есть ли какое-либо ведение журнала отладки, которое я мог бы включить, что могло бы помочь в диагностике проблемы?
  • Существуют ли какие-либо общие ловушки конфигурации, в которые я мог попасть?

Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация (например, код), которую я мог бы предоставить, чтобы помочь в диагностике проблемы. Вопрос уже достаточно длинный, поэтому я стараюсь не загромождать его лишними кодами.

Я использую:

  • Spring Boot 1.2.1 (такая же проблема с 1.0.8. Я обновился, чтобы посмотреть, может ли это помочь.)
  • sockjs-клиент 0.3.4
  • топать-веб-сокет 2.3.1

Кроме того, если это уместно, я использую PreAuthenticatedAuthenticationProvider для определения пользователя и HttpServletRequestWrapper для обеспечения того, чтобы имя пользователя, определенное в заголовке, предоставлялось как имя Principal. т. е. имя пользователя в приведенном выше коде — это мое имя пользователя домена Active Directory.

Примечание. Я изучил этот вопрос, что звучит немного похоже. Однако их «рабочий код» — это то, что я безуспешно пытаюсь заставить работать.


person Steve    schedule 21.01.2015    source источник
comment
Вы решили эту проблему?   -  person Haozhe Xie    schedule 19.05.2015
comment
К сожалению нет. На данный момент мой обходной путь заключается в публикации в пользовательской теме, где я просто объединяю имя пользователя с путем.   -  person Steve    schedule 19.05.2015
comment
Угу, я тоже не могу понять   -  person KimchiMan    schedule 05.02.2017