我在一个个人项目中,我希望能够发送一个消息从生产者到最终用户的工作。每条消息都有一个密钥,用于标识必须接收消息的用户。
这是我想象的整体结构:
我不知道如何告诉负载平衡器,例如,每当一个键为2的用户联系负载平衡器时,我们就必须与处理键为2的分区的使用者建立连接(可能是通过websocket)。当kafka必须为密钥分配一个分区时,或者通过跟踪每个使用者管理的密钥,可能可以使用相同的技术来完成某些事情。
我不知道这是否可能,但即使可能,我描述的技术可能会使代码与体系结构过于耦合。
你能帮我解决这个问题吗?我不想将消息存储在远程数据存储上并从随机使用者检索它们。我希望消费者能够尽快为用户服务,无论何时与它建立连接。如果与该用户没有连接,那么我可以存储消息并在连接就绪时传递它。
1条答案
按热度按时间g6baxovj1#
我最终发现他们在netflix使用的推送消息技术很有用。诀窍是添加另一层间接寻址,由web服务器构成。每当新客户机连接到其中一个web服务器时,一个元组<client\u id,webserver\u id>就会保存在外部数据存储中。当使用者需要将消息发送给具有该特定键的客户机时,它会在外部注册表中查找该消息,以找到客户机的连接位置。一旦找到它,它就将消息发送到正确的web服务器,该服务器将消息推送到客户机。