我有一个主题/topic/routes/{routeid}
用户订阅该主题,并使用以下控制器方法获取该路线上公交车的当前位置:
@SubscribeMapping(TOPIC + "/routes/{routeId}")
public MessageWrapper<BusStatusResponseModel> subscribeToRouteLocation(
@DestinationVariable(value = "routeId") short routeId) {
return new MessageWrapper<>(LOCATION_MESSAGE, routeService.getBusForRoute(routeId));
}
但是,我想尝试将我的应用程序初始化移到websockets而不是REST,因此在订阅时,我想返回多个单独的消息。例如,路线上的停靠点,该路线上的先前记录等。
我尝试使订阅控制器方法返回void,而是像这样使用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 / ...,这不是我想要的。
我要问的可能吗?