有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java spring代理通道访问

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    找到了我需要的答案:

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

      @自动连线 私人SimpMessageTemplate

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

      公共类SubscribeEvent实现ApplicationListener