Java spring代理通道访问

Java spring代理通道访问,java,spring-websocket,spring-messaging,Java,Spring Websocket,Spring Messaging,关于如何使用SpringWebSocket和消息传递,我有几个问题。因此,我有一个与外部web service producer端点接口的程序,该端点将向我的web service consumer端点发送数据有效负载。在程序的另一端,我将把这些数据有效载荷路由到多个websocket连接(stomp和sockjs)。外部web服务生产者在每个数据负载中为每个查询请求提供订阅ID,因此我的方法是使用SimpMessageTemplate将它们发送回代理,该模板具有自己的唯一目的地(即/user/

关于如何使用SpringWebSocket和消息传递,我有几个问题。因此,我有一个与外部web service producer端点接口的程序,该端点将向我的web service consumer端点发送数据有效负载。在程序的另一端,我将把这些数据有效载荷路由到多个websocket连接(stomp和sockjs)。外部web服务生产者在每个数据负载中为每个查询请求提供订阅ID,因此我的方法是使用SimpMessageTemplate将它们发送回代理,该模板具有自己的唯一目的地(即/user/{subscriptionId}/subscribe)。这样,如果进行了重复的查询,我就可以将每个websocket客户端订阅到现有的目标,如果没有,我只能向外部web服务生产者请求新的订阅

  • 如何从不同组件(如web服务使用者)中访问SimpMessageTemplate,以便将数据有效负载发送到MessageBroker?我是否只是声明SimpMessageTemplate静态,并在存储模板对象的控制器中声明一个getter函数

  • 如何获得所有已知目的地的列表以及每个目的地的stomp客户端订户数?外部web服务生产者为每个订阅设置一个终止时间,因此如果仍然有目标订阅服务器,我希望实现自动续订请求。我想我可以自己使用映射/缓存跟踪它,并在每次打开或关闭websocket会话时更新它们,但如果可能的话,我更喜欢使用spring,因为它将风险降至最低,并且可能不太容易出错,或者可能需要一个功能齐全的代理,如RabbitMQ或ActiveMQ来完成这项工作


  • 找到了我需要的答案:

  • 我所需要做的就是使用spring自动连接支持,bean将被注入初始化的对象

    @自动连线 私有SimpMessageTemplate

  • 需要一个功能齐全的经纪人,但是对于我想做的事情,我决定这将是太多的工作,基本上不需要。我决定只使用java映射/缓存,通过第三方web服务实现我自己的订阅检查。通过在eclipse中设置java.class文件中的断点,甚至使用java反编译器插件,我设置了非常长的断点,并发现所有这些信息都可以在DefaultSubscriberRegistry类中找到。虽然我无法使用Spring提供的api访问它,但我可以放心,应用程序正在正确处理它。当客户端订阅或断开与我的应用程序的连接时,注册表的内部映射/缓存中的信息将相应地添加和删除。此外,我可以通过实现Spring提供的接口(如SessionSubscribeeEvent或SessionDisconnectedEvent)对我自己实现的映射/缓存进行更改,并使用ApplicationListener对其进行子类化,每当客户端订阅或断开连接时,都会触发这些更改

    公共类SubscribeEvent实现ApplicationListener