【问题标题】:Spring STOMP - No matching message handlerSpring STOMP - 没有匹配的消息处理程序
【发布时间】:2021-09-28 01:57:57
【问题描述】:

我的目标是通知玩家是否实时加入团队。 由于将在控制器中创建播放器,因此我想通过套接字通知团队此更改。 这是我第一次尝试这样做:

@RestController
@RequestMapping("/api/secure/players/")
public class PlayerController {

    @Autowired
    private SimpMessagingTemplate simpMessageTemplate;

    @PostMapping
    public ResponseEntity<PlayerDTO> createPlayer() {
        // ...
        // data is being processed
    
        // notify team about the change
        simpMessageTemplate.convertAndSend("/teams/" + selectedTeam.getId() + "/", player);


        return ...
    }
}
@Controller
public class TeamSocket {

    private static final Logger logger = LoggerFactory.getLogger(TeamSocket.class);

    @MessageMapping("/teams/{team}")
    @SendTo("/teams/{team}")
    public void teamEvent(@DestinationVariable String team) {
        logger.debug("Received message -> {}", team);
    }
}
@Configuration
@ComponentScan
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // I still dont fully understand this. Do i have to enable it? (It does not fix the issue).
        // config.enableSimpleBroker("/teams/");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/api/secure/stomp/").withSockJS();
    }
}

但是,Spring 告诉我,它无法映射请求。我做错了什么?

DEBUG 29487 --- [nboundChannel-4] .WebSocketAnnotationMethodMessageHandler : Searching methods to handle SUBSCRIBE /teams/16 id=sub-0 session=0nkqv1km, lookupDestination='/teams/16'
DEBUG 29487 --- [nboundChannel-4] .WebSocketAnnotationMethodMessageHandler : No matching message handler methods.
DEBUG 29487 --- [nboundChannel-2] org.springframework.web.SimpLogging      : Processing SUBSCRIBE /teams/16 id=sub-0 session=0nkqv1km
const client = new SockJS(`${REST_API}/api/secure/stomp/`);
const stompClient = Stomp.over(client);

stompClient.connect({}, (frame) => {
    stompClient.subscribe(`/teams/${teamId}`, (message) => {
        ...
    });
});

【问题讨论】:

    标签: javascript java spring-boot sockets


    【解决方案1】:

    我看到您在订阅 /teams/${teamId} 时在您的 convertAndSend 方法中使用路径 "/teams/" + selectedTeam.getId() + "/"。您是否需要在订阅时添加额外的斜线,或者您可能需要从 convertAndSend 中删除额外的斜线?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2016-06-08
      • 1970-01-01
      • 2013-03-30
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多