stomp与rabbitmq stomp插件

来源:互联网 发布:知乎 淘宝店推荐 编辑:程序博客网 时间:2024/06/06 18:58

spring官方websocket框架提供stomp协议实现,从stomp协议本身来说,对要实现web长连接服务非常方便,但是“理想”很丰满,stomp协议到stomp插件实现提供方的映射简直是……我说的客气一点,简直是一坨屎

stomp仿照大部分mq规则,分为topic和queue,topic为广播,queue为单播队列,这好理解。但是到了rabbitmq stomp插件这里是什么呢?——对每个用户无论topic还是queue的订阅都设置为queue,这不是rabbitmq的问题,而是spring的问题,spring为每个登陆用户分配一个session,即使同一用户登陆多个session,那么对同一个send to user的queue或者对同一个topic都会为这个订阅单独申请一个rabbitmq里的queue,对于erlang实现的高并发的rabbitmq来说这样实现简单想似乎并无问题,但是问题是每一个rabbitmq里的queue都会占用你内存,一个14k,当大量用户同时登陆的时候你可以想象……没错!内存会爆炸,而实际这些queue都是几乎没有繁忙工作的空队列,虽然订阅了,但是触发时机非常有限,大部分时间都是空的

所以解决方案是什么呢?那就是抛弃stomp提供的便利,自己在应用中实现这种多个用户多个session,同一个session多个订阅的模型

也许吧,框架都是好框架,关键在用的人,但是对于需要高并发和性能的应用来说,框架使用要慎重,因为要实现,必须有为高性能而作的定制化开发,在这时候,框架往往是你通往目标路上的最大绊脚石


0 0
原创粉丝点击