NodeJS Azure Web应用程序中存在重复的WebSocket订阅

tjvv9vkg  于 2022-12-03  发布在  Node.js
关注(0)|答案(1)|浏览(162)

bounty将在4天后过期。回答此问题可获得+100声望奖励。jonhobbs希望吸引更多人关注此问题。

我有一个node.js应用在Azure中作为webApp运行。启动时,它使用WebSocket订阅连接到外部服务。具体来说,我使用reconnecting-websockets NPM包来 Package 它以处理断开连接。
我遇到的问题是,因为有2个应用程序示例在Azure上运行(故障转移的水平扩展),我最终在任何时候都有两个订阅。
有没有一个明显的方法来解决这个问题?
对于额外的上下文,这是一个问题,原因有两个:
1.我为收到的每封邮件付费,但已超出限额
1.当接收到消息时,我会进行处理并更新数据库,这些消息也会被复制。

tzcvj98z

tzcvj98z1#

此问题的一个可能解决方案是使用共享会话状态管理解决方案(如Azure Redis缓存)来存储WebSocket订阅信息。这样,应用的两个示例都可以访问相同的订阅信息,并且只会创建一个订阅。
另一种解决方案是使用Azure应用服务的部署插槽功能,其中应用的一个示例被指定为“主”示例并处理WebSocket订阅。另一个示例在主示例出现故障时充当备用示例。这样,在任何给定时间,只有一个应用示例主动处理websocket订阅。
此外,在应用程序中实现一些逻辑可能会有所帮助,以便在创建新订阅之前检查是否已存在WebSocket订阅,从而防止创建重复的订阅。

相关问题