连接/断开camel websocket连接/断开上的ActiveMQ主题

连接/断开camel websocket连接/断开上的ActiveMQ主题,websocket,apache-camel,activemq,Websocket,Apache Camel,Activemq,我有以下camel路由,它侦听ActiveMQ主题上的消息,并立即将它们发送到所有连接的web套接字客户端。这工作正常,但只要初始化了route builder,就可以与主题建立连接 from("activemq:topic:mytopic").routeId("routeid").to("websocket://test?sendToAll=true"); 我只需要在一个或多个客户端连接到web套接字时连接到主题。一旦没有更多的联系,我想停止听这个话题。这可能吗?根据我的说法,没有合适的方法

我有以下camel路由,它侦听ActiveMQ主题上的消息,并立即将它们发送到所有连接的web套接字客户端。这工作正常,但只要初始化了route builder,就可以与主题建立连接

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

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

根据我的说法,没有合适的方法来做到这一点。实现这一点的唯一方法是重写Jetty WebSocket代码。一旦覆盖Jetty Websocket代码,您就可以灵活地在open和close Websocket中编写自己的自定义代码

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

是的,这是正确的。我们可以考虑使用一个从(WebSoC:Test.Evase= OnCaln结,OnDeSnCn连接),这样您就可以对事件进行过滤,然后使用它作为一个路由,然后您可以调用控制总线来暂停/恢复带有AMQ主题的其他路由。将其添加到大气websocket组件中也是有意义的。在短期内,我认为我可以利用JMX的功能来轮询连接数,并相应地暂停路由。想法?是的,欢迎你登录JIRA:。如果您可以在JMX中找到详细信息,那么您可以使用它来控制AMQ路由。由于您需要计划轮询JMX统计数据,因此有一个时间窗口,您可能会有点落后。