Лучший способ обрабатывать оперативное обновление панели пользовательских оповещений

#java #angular #spring #spring-boot #websocket

#java #angular #spring #spring-boot #websocket

Вопрос:

Я хотел бы создать классическую панель оповещений, используя angular и java spring / spring boot, которая реагирует на события и обновления в режиме реального времени, чтобы пользователю не нужно было обновлять страницу, чтобы получать свои новейшие оповещения. Из-за необходимости оперативного обновления кажется, что веб-сокеты — мой лучший выбор.

После просмотра некоторых руководств кажется, что подключение к серверному сокету из angular будет довольно простым, и соединение может быть легко включено / выключено. Для этого будут использоваться stompjs и sock js-client.

Однако, похоже, мои проблемы будут заключаться в серверной части при создании различных ‘тем’, на которые пользователи будут подписываться. Все эти руководства касаются только создания статической комнаты при запуске сервера, к которой должен присоединиться каждый пользователь (например, приложение для чата). Но для моего сценария мне нужно было бы динамически создавать темы «на лету» (по одной отдельной теме на пользователя) вместо создания всех моих тем в начале.

У кого-нибудь есть опыт использования spring или spring boot для динамического создания тем, на которые подписываются мои пользователи?

Основное руководство, которое я просматривал, это: https://medium.com/oril/spring-boot-websockets-angular-5-f2f4b1c14cee

Ответ №1:

я обнаружил, что, используя это в моем контроллере:

 @MessageMapping("/meeting/{roomId}")
private void sendMessageTpPrivateRoom(String message, @DestinationVariable String roomId) throws IOException {
    System.out.println("message sent to: "   roomId);
    this.template.convertAndSend("/meeting/"   roomId, message);
    addToHistory(roomId, message);
}
  

в сочетании с этим в моей конфигурации:

 @Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/socket")
            .setAllowedOrigins("*")
            .withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.setApplicationDestinationPrefixes("/app")
            .enableSimpleBroker("/chat", "/meeting");
}
  

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