Отправка сообщений указанному пользователю c с помощью Spring Websocket - PullRequest
0 голосов
/ 20 января 2020

Я настроил WebSocket с пружиной, описанной в этом уроке: https://spring.io/guides/gs/messaging-stomp-websocket/. Что мне нужно, так это чтобы мой Сервер отправлял сообщение определенным c пользователям каждые 5 секунд. Итак, я сначала сделал это:

@Autowired
private SimpMessagingTemplate template;

@Scheduled(fixedRate = 5000)
public void greet() {
    template.convertAndSend("/topic/greetings", new Greeting("Bufff!"));
}

И это работает. Теперь для отправки сообщений только определенным c пользователям я изменил следующее:

@Scheduled(fixedRate = 5000)
public void greet() {
   template.convertAndSendToUser("MyName","/queue/greetings", new Greeting("Bufff!"));
}

Добавление очереди в WebSocketConfig. java:

public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic","/queue");
    config.setApplicationDestinationPrefixes("/app");
}

Изменение аннотации в GreetingController. java:

@MessageMapping("/hello")
@SendToUser("/queue/greetings")
public Greeting UserGreeting(HelloMessage message, Principal principal) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}

И изменить функцию соединения в приложении. js:

var socket = new SockJS('/gs-guide-websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
    setConnected(true);
    console.log('Connected: ' + frame);
    stompClient.subscribe('user/queue/greetings', function (greeting) {
        showGreeting(JSON.parse(greeting.body).content);
    });
});

Сервер использует Spring-boot-security, и я убедился, что MyName является правильным Имя, ища всех пользователей с SimpUserRegistry { ссылка }). Но, к сожалению, мой код не работает. Я уже пробовал это Отправка сообщения указанному c пользователю, используя spring , но я не хочу, чтобы Spring различал guish между сеансами, но пользователями. Я также посмотрел на отправку сообщения указанному пользователю c в Spring Websocket , но это не помогло, потому что ссылка не работает.

Это мой журнал консоли:

2020-01-20 17:08:51.352 DEBUG 8736 --- [nboundChannel-3] .WebSocketAnnotationMethodMessageHandler : Searching methods to handle SEND /app/hello session=kvv0m1qm, lookupDestination='/hello'
2020-01-20 17:08:51.352 DEBUG 8736 --- [nboundChannel-3] .WebSocketAnnotationMethodMessageHandler : Invoking de.iteratec.iteraweb.controllers.GreetingController#UserGreeting[2 args]
2020-01-20 17:08:52.354 DEBUG 8736 --- [nboundChannel-3] org.springframework.web.SimpLogging      : Processing MESSAGE destination=/queue/greetings-userkvv0m1qm session=null payload={"content":"Hello, hey!"}
2020-01-20 17:08:54.882 DEBUG 8736 --- [MessageBroker-2] org.springframework.web.SimpLogging      : Processing MESSAGE destination=/queue/greetings-userkvv0m1qm session=null payload={"content":"Bufff!"}
2020-01-20 17:08:59.883 DEBUG 8736 --- [MessageBroker-4] org.springframework.web.SimpLogging      : Processing MESSAGE destination=/queue/greetings-userkvv0m1qm session=null payload={"content":"Bufff!"}

Я пропустил изменение?

1 Ответ

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

Видите ли вы, что клиент успешно подписывается на вашу конечную точку?

Я думаю, что вам не хватает первого / в коде клиента 'user/queue/greetings' должно быть '/user/queue/greetings'

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