在STOMP订阅Spring Websocket上返回多个对象

时间:2018-09-04 17:47:09

标签: spring spring-boot websocket spring-websocket stomp

我有一个主题/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 / ...,这不是我想要的。

我要问的可能吗?

0 个答案:

没有答案