我有几个问题,一是如何使用 spring websockets 和消息传递。所以我有一个与外部 Web 服务生产者端点接口的程序,它将数据有效负载发送到我的 Web 服务消费者端点。在我的程序的另一端,我会将这些数据负载路由到多个 websocket 连接(stomp 和 sockjs)。外部 Web 服务生产者在每个数据负载中为每个查询请求提供订阅 ID,因此我的方法是使用 SimpMessagingTemplate 将它们发送回代理,该模板具有它自己的唯一目的地(即 /user/{subscriptionId}/subscribe)。这样,如果进行了重复查询,我可以将每个 websocket 客户端订阅到现有目标,否则仅向外部 Web 服务生产者请求新的订阅。
如何从不同的组件(例如我的 Web 服务使用者)访问我的 SimpMessagingTemplate,以便我可以将数据有效负载发送到我的消息代理?我是否只是将我的 SimpMessagingTemplate 声明为静态并在存储模板对象的控制器中声明一个 getter 函数?
如何获取所有已知目的地的列表以及每个目的地的 stomp 客户端订阅者数量?外部 Web 服务生产者为每个订阅设置终止时间,所以如果目的地仍有订阅者,我想实现自动续订请求。我想我可以自己使用 Maps/Caches 跟踪它,并在每次打开或关闭 websocket 会话时更新它们,但我更喜欢使用 spring要做到这一点,需要诸如 RabbitMQ 或 ActiveMQ 之类的特色代理。