У меня есть тема /topic/routes/{routeid}
Пользователи подписываются на эту тему и получают текущее местоположение шины на этом маршруте, используя следующий метод контроллера:
@SubscribeMapping(TOPIC + "/routes/{routeId}")
public MessageWrapper<BusStatusResponseModel> subscribeToRouteLocation(
@DestinationVariable(value = "routeId") short routeId) {
return new MessageWrapper<>(LOCATION_MESSAGE, routeService.getBusForRoute(routeId));
}
Однако я хотел бы попытаться переместить инициализацию моего приложения в веб-сокеты вместо REST, поэтому при подписке я хотел бы вернуть несколько отдельных сообщений. Например, остановки на маршруте, предыдущие записи с этого маршрута и т. Д.
Я попытался сделать метод контроллера подписки возвращаемым недействительным, и вместо этого использовал SimpMessagingTemplate примерно так:
@SubscribeMapping(TOPIC + "/routes/{routeId}")
public void subscribeToRouteLocation(@DestinationVariable(value = "routeId") short routeId, Principal principal) {
messagingTemplate.convertAndSendToUser(
user.getName(),
ROUTES,
new MessageWrapper<>(LOCATION_MESSAGE,
routeService.getBusForRoute(routeId))
);
final LocalDate localDate = dateService.tenantTime().toLocalDate();
messagingTemplate.convertAndSendToUser(
user.getName(),
ROUTES,
new MessageWrapper<>(
MessageWrapper.ROUTE_ACTIVITY_SUBSCRIPTION_MESSAGE,
activityService.getAllRouteReportsForRouteInDateRange(routeId, localDate.minusDays(7), localDate))
);
}
Однако, это отправляет в / user / ..., что не то, что я хочу.
Возможно ли то, что я спрашиваю?