gpt4 book ai didi

spring-boot - @SubscribeMapping 与 @MessageMapping

转载 作者:行者123 更新时间:2023-12-05 00:48:10 27 4
gpt4 key购买 nike

在 Spring Boot 中使用 websockets 时,我看到了使用以下示例的示例:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic/");
config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/greeting");;
}
}

指定 config.setApplicationDestinationPrefixes("/app") 并在 Controller 中使用 @MessageMapping 注解。

我还看到了仅使用 enableSimpleBroker() 并在 Controller 中使用 @SubscribeMapping 的示例。

据我了解,@MessageMapping 负责将收到的消息路由到正确的方法。只有当目标包含在 setApplicationDestinationPrefixes 中声明的前缀之一时,才会触发带有此注解的方法。

但@SubscribeMapping 也将消息路由到正确的方法,我们不需要在配置类中调用 setApplicationDestinationPrefixes()。

有什么区别?

最佳答案

简答

@MessageMapping -带注释的方法只会对 SEND 使用react目的地前缀为 /app 的消息并匹配注解中设置的主题。

@SubscribeMapping -带注释的方法只会对 SUBSCRIBE 使用react目的地与注释中设置的主题匹配的消息。

更长的答案

客户端可以发送多种类型的 STOMP 命令,其中有 SUBSCRIBESEND .

@SubscribeMapping("/topic/topic1") 注释的方法只会收到SUBSCRIBE目的地为 "/topic/topic1" 的消息. IE。当客户端订阅主题"/topic/topic1" , 这个方法会被调用。

相反,当客户端发送 SEND"/topic/topic1" 留言目的地,这个方法不会被调用。

@MessageMapping("/topic2") 注释的方法将被要求 SEND发送到 "/app/topic2" 的消息目的地,默认情况下,会将结果发送到目的地"/topic/topic2" .

逻辑是客户端优先CONNECT s,然后 SUBSCRIBE s 到一些主题并接收服务器(或其他客户端)发送到这些主题的消息。也可以SEND一些主题的一些消息。那么可能UNSUBSCRIBEDISCONNECT .消息交换的过程由消息代理管理,它可以是一个简单的内存对象或一些高级产品,如 ActiveMQRabbitMQ等等

关于spring-boot - @SubscribeMapping 与 @MessageMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com