使用Stomp代理传递Web套接字消息,我可以订阅目的地/topic/mydest
。这将创建一个代理订阅,并接收系统为该代理目标触发的所有消息,这些消息在系统中发生某些事件时发生。春季Web套接字消息传递 - 订阅并发送初始消息
我可以订阅目的地/app/mydest
,并调用一个控制器方法@SubscribeMapping("mydest")
将被调用,并且返回值仅在此套接字上作为消息发回。据我所知,这是唯一的消息,将永远发送这个订阅。
有没有办法在一个单一的订阅结合这一点,即一定/topic
目的地,和触发创建一个代理中的订阅一些代码,直接将消息发送回用户?
用例:当系统发生错误时,带有当前错误计数的消息被发送到/topic/mydest
。当新客户订阅时,我只想向他发送最后一个已知的错误计数。其他人对此刻不感兴趣,因为伯爵没有改变。
我目前的解决方案是订阅/app/mydest
和/topic/mydest
,并在客户端使用相同的消息处理程序。但它确实是一个合乎逻辑的订阅,并且由于客户需要记住订阅这两者,所以这有点容易出错。
我在这方面的问题:订阅/app/
会不会有更多消息?有什么要打电话来触发吗?我还可以如何向用户发送主题的初始信息,而不向现有用户发送冗余消息?
按照要求,这是我的Websocket配置类。
@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/queue/", "/topic/", "/exchange/");
registry.setApplicationDestinationPrefixes("/app");
}
}
也许我应该澄清:从实际的角度来看,我所描述的当前解决方案已经够好了。我对这个问题的主要动机是完全掌握**订阅**到用户目的地的意图,以及对订阅经纪人目的地的行为方式。 – rainerfrey