Pau*_*ira 2 stomp websocket spring-boot spring-websocket
在 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");;
}
}
Run Code Online (Sandbox Code Playgroud)
指定 config.setApplicationDestinationPrefixes("/app") 并在控制器中使用 @MessageMapping 注释。
而且我还看到了仅使用 enableSimpleBroker() 并在控制器中使用 @SubscribeMapping 的示例。
据我了解,@MessageMapping 负责将收到的消息路由到正确的方法。并且只有当目的地包含在 setApplicationDestinationPrefixes 中声明的前缀之一时,才会触发带有此注释的方法。
但是@SubscribeMapping 也将消息路由到正确的方法,我们不需要在配置类中调用 setApplicationDestinationPrefixes()。
有什么不同?
简答
@MessageMapping-annotated 方法将仅对SEND目的地具有前缀/app并与注释中设置的主题匹配的消息做出反应。
@SubscribeMapping-annotated 方法将仅对SUBSCRIBE目的地与注释中设置的主题相匹配的消息做出反应。
更长的答案
客户端可以发送多种类型的 STOMP 命令,其中包括SUBSCRIBE和SEND。
带有注释的方法@SubscribeMapping("/topic/topic1")将只SUBSCRIBE接收带有目的地的消息"/topic/topic1"。即当客户端订阅主题时"/topic/topic1",将调用此方法。
相反,当客户端向目的地发送SEND消息时"/topic/topic1",不会调用此方法。
@MessageMapping("/topic2")对于SEND发送到"/app/topic2"目的地的消息,将调用带有注释的方法,默认情况下,会将结果发送到目的地"/topic/topic2"。
逻辑是客户端先CONNECTs,然后SUBSCRIBEs到一些主题,并接收服务器(或其他客户端)发送到这些主题的消息。它也可能SEND是一些主题的一些消息。那么它可能UNSUBSCRIBE和DISCONNECT。消息交换的过程由消息代理管理,它可以是一个简单的内存对象或一些高级产品,例如ActiveMQ或RabbitMQ等。
| 归档时间: |
|
| 查看次数: |
2002 次 |
| 最近记录: |