Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring用户目的地_Java_Spring Websocket_Spring Messaging - Fatal编程技术网

Java Spring用户目的地

Java Spring用户目的地,java,spring-websocket,spring-messaging,Java,Spring Websocket,Spring Messaging,我有一个spring引导应用程序,它将发布到用户定义的目标频道,例如: @Autowired private SimpMessagingTemplate template; public void send() { //.. String uniqueId = "123"; this.template.convertAndSendToUser(uniqueId, "/event", "Hello"); } 然后stomp over SockJS客户端可以订阅它并接收消息。假

我有一个spring引导应用程序,它将发布到用户定义的目标频道,例如:

@Autowired
private SimpMessagingTemplate template;

public void send() {
   //..
   String uniqueId = "123";
   this.template.convertAndSendToUser(uniqueId, "/event", "Hello");
}
然后stomp over SockJS客户端可以订阅它并接收消息。假设我在spring应用程序中注册了一个名为“/data”的stomp端点

实际上,将有多个用户客户端订阅同一个不同的用户目的地,因此每个发布/订阅通道不是一对一的,我只是这样做,因为spring的“/topic”概念必须以编程方式定义,并且“/queues”只能由一个用户使用。我如何知道用户目的地何时不再有任何订户?如何删除用户目的地

@SendToUser('/queue/dest')
public String send() {
   //..
   String uniqueId = "123";
   return "hello";
}
在客户端上,您将订阅
'/user/queue/dest'


在eclipse中添加通道拦截器并在调试模式下运行的代码段内设置断点后,我发现在消息处理程序持有的注册表对象中有一组websocket会话和目标映射,这些映射又存储在消息通道对象中。我在主题中发现了这一点,尽管我不确定纯粹的用户目的地方法

然而,Spring并没有让api对我开放,让我只调用一个函数来获取每个主题的所有订阅者的列表,至少在不传递消息的情况下是这样。所有其他有用的内容都设置为私有,因此无法通过编程方式访问。这是没有帮助的,因为我只希望在取消订阅或断开客户端连接时,当正在取消订阅/断开连接的主题没有其他侦听客户端时,才会触发操作


现在看看嵌入ActiveMQ这样的全功能代理,看看它是否可以潜在地解决我的问题

您使用的是哪个message broker?只是spring提供的默认简单代理,现在我想我是否需要嵌入ActiveMQ这样的全功能代理来支持这一点。这并不能回答问题,正如前面提到的问题,我已经证明了我已经知道怎么做了,谢谢你注意到这个问题,但请不要跳过最后一点。
@SendToUser('/queue/dest')
public String send() {
   //..
   String uniqueId = "123";
   return "hello";
}