春用户目的地

问题描述:

我有将发布到用户定义的目标渠道,例如弹簧启动应用程序:春用户目的地

@Autowired 
private SimpMessagingTemplate template; 

public void send() { 
    //.. 
    String uniqueId = "123"; 
    this.template.convertAndSendToUser(uniqueId, "/event", "Hello"); 
} 

然后一跺脚超过SockJS客户端可以订阅它和接收消息。假设我已经注册了我所谓的“/数据” Spring应用程序跺脚端点

var ws = new SockJS("/data"); 
var client = Stomp.over(ws); 
var connect_fallback = function() { 
    client.subscribe("/user/123/event", sub_callback); 
}; 

var sub_callback = function(msg) { 
    alert(msg); 
}; 

client.connect('','', connect_callback); 

实际上会有多个用户客户签约了同不同的用户的目的地,因此每个发布/订阅通道是不是一个一个,我只是这样做,因为春天的“/主题”的概念必须以编程方式定义,“/队列”只能由一个用户使用。我如何知道用户目标不再有任何订户?如何删除用户目的地?

+0

该消息代理您使用的可能解决我的问题? – Karthik

+0

只是春天提供的默认简单经纪人,现在我想如果我需要嵌入一个全功能的经纪人,如activemq支持这一点。 – ron

@SendToUser('/queue/dest') 
public String send() { 
    //.. 
    String uniqueId = "123"; 
    return "hello"; 
} 

在客户端,你会订阅'/user/queue/dest'

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html#websocket-stomp-user-destination

+0

这并没有回答这个问题,正如我指出的那样,我已经知道如何做到这一点,因为注意到了这个问题,但请不要跳过最后一步。 – ron

在Eclipse调试模式下运行的代码段中添加频道拦截器和设置断点后,我发现有一个集合websocket会话和目标映射在由消息处理程序保存的注册表对象中,而这些对象又可以看作存储在消息通道对象中。我发现这个主题虽然不知道纯粹的用户目标方法。

但是,Spring并没有让我打开API来调用一个函数来获取每个主题的所有订阅者列表,至少不是不传递消息。所有其他有用的设置都是私人的,因此无法以编程方式访问。这是没有用的,因为我希望只在取消订阅/断开连接的主题没有其他监听客户端时才触发取消订阅或断开客户端的操作。

现在看看嵌入功能齐全的券商如ActiveMQ的,看它是否能