【问题标题】:Connect/disconnect from ActiveMQ topic on camel websocket connection/disconnection在骆驼 websocket 连接/断开连接上连接/断开 ActiveMQ 主题
【发布时间】:2016-08-21 14:40:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: websocket apache-camel activemq


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这是正确的。我们可以考虑使用 from(websocket:test?events=onConnect,onDisconnect) 以便您可以过滤事件,然后将其用作路由,然后您可以调用 controlbus 以暂停/恢复具有 AMQ 主题的其他路由。
    • @ClausIbsen 添加这些事件肯定会有所帮助。将它添加到 Atmosphere-websocket 组件也是有意义的。在短期内,我认为我可以利用 JMX 功能来轮询连接数并相应地暂停路由。想法?
    • 是的,欢迎您登录 JIRA:camel.apache.org/support.html。如果您可以在 JMX 中找到详细信息,那么您可以使用它来控制 AMQ 路由。由于您需要安排轮询 JMX 统计信息,因此您有一个时间窗口有点落后。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2013-08-02
    相关资源
    最近更新 更多