Connect/disconnect 来自关于 camel websocket 的 ActiveMQ 主题 connection/disconnection

Connect/disconnect from ActiveMQ topic on camel websocket connection/disconnection

我有以下 camel 路由,它侦听有关 ActiveMQ 主题的消息并立即将它们发送到所有连接的 Web 套接字客户端。这工作正常,但一旦路由构建器被初始化,就会建立与主题的连接。

from("activemq:topic:mytopic").routeId("routeid").to("websocket://test?sendToAll=true");

我需要的是仅当一个或多个客户端连接到网络套接字时才连接到主题。一旦没有更多的联系,我想停止听这个话题。这可能吗?

据我所知,没有正确的方法可以做到这一点。实现这一点的唯一方法是覆盖 Jetty WebSocket 代码。覆盖 Jetty Websocket 代码后,您可以灵活地在打开和关闭 websocket 中编写自己的自定义代码。

  • 在打开的 websocket 中为所有 websocket 客户端维护一个列表。检查关闭的 websocket 并将其从列表中删除,以了解有多少已连接或已断开连接。或者在打开和关闭 websocket 时保持一个计数器。
  • 一旦所有 websocket 客户端关闭,暂停路由,以便您的消息保留在主题或队列中。
  • 如果任何客户端连接到 websocket,恢复路由,以便消息到达连接的特定客户端。