我需要设计像类似应用程序或类似模块的任何信使类似的东西。
高级别流程
Client > Load Balancer > Web servers(assume 10 clustered server for now) > Rest based controller > Service > DAO > DB
挑战: -
说朋友1和朋友2在线。朋友1已建立到Web服务器1的HTTP Web连接,并且Friend 2已建立到Web服务器2的HTTP Web连接。 朋友1将消息发送给朋友2.现在,只要消息到达Web服务器1,我就需要将消息传送到Web服务器2,以便可以通过已建立的Web连接将消息推送回朋友2
我在这里有几个相关问题:
此外,如果destinationUserId处于脱机状态,我需要将消息放回队列。不确定如何实现?我相信我们需要使用其他一些队列实现(可能是基于java的内存队列) 而不是JMS队列/主题?服务器代码只有在从客户端获得确认后才会从自定义队列中删除该消息。
如果任何客户端在发送消息时处于离线状态,那么在他上线时,他将发送拉取请求。服务器将对分布式队列发出请求 ,分布式队列将从正确的物理队列中拉出消息。我的问题应该是分布式队列,将destinationUserId和消息保存为元数据中的值吗?
数据库与队列: - 使用这种方法,我认为不需要将消息存储在数据库中,这可能比队列(内存中队列)成本高(时间复杂度)高度实时的应用程序,如信使。我们只需要在db。
更新: - 我在quora找到了相关链接,其中Kah Seng Tay的最后一点即What protocol is used in Whatsapp app ?...
也确认了使用队列的simialr方法,但仍然是我上面的问题队列还没有回答。