Spring boot @订阅映射vs@MessageMapping
在将WebSocket与Spring Boot一起使用时,我看到了使用以下内容的示例:Spring boot @订阅映射vs@MessageMapping,spring-boot,websocket,spring-websocket,stomp,Spring Boot,Websocket,Spring Websocket,Stomp,在将WebSocket与Spring Boot一起使用时,我看到了使用以下内容的示例: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry con
@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");;
}
}
使用@MessageMapping注释在控制器中指定config.setApplicationDestinationPrefixes(“/app”)和
我还看到了一些只使用enableSimpleBroker()的示例,并且在控制器中使用@SubscribeMapping
据我所知,@MessageMapping负责将收到的消息路由到正确的方法。只有当目标包含setApplicationDestinationPrefixes中声明的前缀之一时,才会触发带有此注释的方法
但是@SubscribeMapping也将消息路由到正确的方法,我们不需要在config类中调用setApplicationDestinationPrefixes()
有什么区别吗?简短回答
@MessageMapping
-带注释的方法将仅对目标具有前缀/app
且与注释中设置的主题匹配的发送
消息作出反应
@SubscribeMapping
-带注释的方法将仅对目标与注释中设置的主题匹配的SUBSCRIBE
消息作出反应
更长的答案
客户端可以发送几种类型的STOMP命令,其中包括SUBSCRIBE
和send
用@SubscribeMapping(“/topic/topic1”)
注释的方法将只接收目标为“/topic/topic1”的SUBSCRIBE
消息。即,当客户端订阅主题“/topic/topic1”
时,将调用此方法
相反,当客户端向“/topic/topic1”
目的地发送SEND
消息时,将不会调用此方法
对于发送到“/app/topic2”
目的地的发送消息,将调用带有@MessageMapping(“/topic2”)
注释的方法,默认情况下,将结果发送到目的地“/topic/topic2”
其逻辑是,客户端首先连接
s,然后订阅
s某些主题,并接收服务器(或其他客户端)发送给这些主题的消息。它还可以向某些主题发送一些消息。然后它可以取消订阅
和断开
。消息交换过程由消息代理管理,它可以是一个简单的内存对象,也可以是一些高级产品,如ActiveMQ
或RabbitMQ
等