首页 文章

Spring 季经纪人 Channels 访问

提问于
浏览
1

我有几个问题,如何使用 spring websockets和消息 . 所以我有一个程序与外部Web服务 生产环境 者 endpoints 连接,该 endpoints 将数据有效负载发送到我的Web服务使用者 endpoints . 在我的程序的另一端,我将这些数据有效负载路由到多个websocket连接(stomp和sockjs) . 外部Web服务 生产环境 者在每个数据有效负载中为每个查询请求提供订阅ID,因此我的方法是使用SimpMessagingTemplate将它们发送回具有自己唯一目标的代理(即/ user / / subscribe) . 这样,如果进行了重复查询,我可以将每个websocket客户端订阅到现有目的地,否则只向外部Web服务 生产环境 者请求新订阅 .

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

  • 如何获取所有已知目的地的列表以及每个目的地的stomp客户端订户数量?外部Web服务 生产环境 者为每个订阅设置终止时间,因此如果仍有目标订阅者,我希望实现自动续订请求 . 我想我可以使用Maps / Caches自己跟踪它并在每次打开或关闭websocket会话时更新它们,但是如果可能的话,我更喜欢使用spring来实现它,因为它可以最大限度地减少我的风险并且可能更不容易出错,或者可能是完整的像RabbitMQ或ActiveMQ这样的特色经纪人是必要的 .

1 回答

  • 1

    找到我需要的答案:

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

    @Autowired private SimpMessagingTemplate

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

    公共类SubscribeEvent实现ApplicationListener

相关问题