sujin190

分享两个通过分布式锁实现 SSE 或长轮询推送的例子

  •  
  •   sujin190 · 2 days ago · 1158 views

    https://github.com/snower/jaslock-spring/tree/main/examples/polling-request

    实现的"反向轮询 RPC"示例工程。解决一个常见的网络打通场景:云上服务需要调用部署在医院内网/受防火墙保护环境中的系统,但内网系统无法被云上直接访问。本示例让内网系统主动长轮询云上接口拉取任务、处理后再回写结果,云上调用方则同步等待结果。

    https://github.com/snower/jaslock-spring/tree/main/examples/pubsub

    实现的发布/订阅( pubsub )消息推送示例工程。用分布式锁的"事件通知"能力构建长轮询与 SSE 实时推送,无需独立的 WebSocket / Push 服务组件,常见用途可以在 AI workflow 中工作流执行和 SSE 实时状态推送解耦,支持多订阅者。

    方案有什么优势的话,应该是:

    • 完全满足标准 web 项目无状态要求
    • 完全满足标准 web 项目可重入要求

    而且在 spring boot 项目中等待期间全部异步完全异步不占用线程,实现逻辑也不复杂,性能和延时也还可以,添加到现有项目中基本不会有副作用。

    是否是一个好方案,大家见仁见智哈。

    flytsuki
        1
    flytsuki  
       2 days ago
    啊这,部署这种服务信息科会同意吗
    sujin190
        2
    sujin190  
    OP
       2 days ago
    @flytsuki 举个例子了,但肯定比要求开外网端口或者长连接容易,毕竟轮询被恶意破解攻击的可能性很小,而且普通 http 请求也更容易被防火墙审计你是否恶意使用,可能更容易接受一点
    keenkiller
        3
    keenkiller  
       22h 6m ago
    一般不是在内网加一个边缘软/硬网关来解决么…

    如果内网系统愿意代码接入的话,云上直接用 mqtt 最简单。
    sujin190
        4
    sujin190  
    OP
       5h 52m ago
    @keenkiller #3 确实是可以,但是不是要加硬件配新方案么,不麻烦么,mqtt 的话毕竟需要开新协议端口,可能很多人都对这个协议不太了解,而且新协议可能现有的防火墙、审计系统啥的不支持不友好,不如普通 http 协议透明吧

    更好的方案确实很多,就现在就是自己用 tcp 重新的做一个也用不了两小时,只能说这个方案对现有环境依赖是相对最低的,毕竟 http 前置机代理或者防火墙请求超时都可以不需要单独调,现在对 http 协议不了解支持不完善的估计很少了吧

    只是给个场景例子,就算是相同实现也可以有其它的方案,多个选择罢了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5431 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 07:28 · PVG 15:28 · LAX 00:28 · JFK 03:28
    ♥ Do have faith in what you're doing.