使用 JMS 或 Redis 集群 Spring Web 应用程序

Posted

技术标签:

【中文标题】使用 JMS 或 Redis 集群 Spring Web 应用程序【英文标题】:clustering a spring web application using JMS or Redis 【发布时间】:2015-01-06 18:23:13 【问题描述】:

这可能是一个愚蠢的问题,但请握住枪,因为我已经做了很多研究,但这一点并没有在我的脑海中点击。

假设我有一个 spring mvc web 应用程序,用户可以使用 websockets 或任何其他机制订阅它......我们得到一个连接对象,可以是 HttpSession、DeferredResult、AtmosphereResource 等,然后我们制作一个本地地图并存储这个暂停的连接......现在当我们需要发送更新时,我们只需从内存映射中获取它并发送更新。

现在,如果我有一个 tomcat 集群并且用户可以连接到任何节点,他们如何共享这些暂停的连接?这不是会话复制问题我没有在会话中存储任何内容我只需要有一种方法可以连接回客户端...

如果这是一种错误的思维方式,那么如何让集群环境发挥作用?用户连接到任何节点,当该节点出现故障时会发生什么?

非常感谢任何帮助我非常渴望得到帮助,因为我们的项目处于关键阶段。

【问题讨论】:

【参考方案1】:

看起来您正在尝试一次解决许多问题:

如何在集群环境中管理 websocket 连接? 如何在服务器端管理心跳、(断开)连接事件? 如何在客户端管理心跳、(断开)连接事件? 如何使用 Spring 有效地驱动消息驱动的应用程序? 还有更多...

Spring 4 introduced websocket support 具有非常酷的功能,可以解决您的许多问题。 在集群环境中,Spring 推荐使用 MQ 实例(支持 STOMP),例如 RabbitMQ。这个 MQ 将管理主题订阅和消息分发,而每个 tomcat 将管理客户端连接。

有几个示例应用程序展示了它是如何工作的:portfolio app 和 chat app。

【讨论】:

以上是关于使用 JMS 或 Redis 集群 Spring Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Spring集成:控制ActiveMQ连接

spring 使用redis集群配置

spring整合JMS

使用带有spring数据缓存的redis时如何启用分布式/集群缓存

使用Spring Data Redis操作Redis(集群版)

如何使用spring boot 2.x为redis集群设置密码