gpt4 book ai didi

javascript - 后端扩展时如何有效地向graphql订阅者发布

转载 作者:行者123 更新时间:2023-12-01 17:15:59 26 4
gpt4 key购买 nike

我有我的后端副本以提供水平扩展。后端有 apollo graphql 订阅。还有一个微服务为特定订阅提供通知。
由于我没有在后端保留任何状态,因此我尝试通过实现 Redis PUB/SUB 来解决问题。当微服务收到一个事件时,它会发布到后端。
在后端的订阅解析器中,我有

webhookCalled: {
subscribe: withFilter(
() => pubsubMyEvent.asyncIterator([MY_EVENT]),
(payload, _, context) => {
return context.dataValues.id == payload.userid;
}
)
}
在上面的代码中,我试图过滤掉负载未寻址到的订阅。我不太确定 withFilter 有多贵常规。
当我从 Redis 收到 PUB 时正在调用
pubsubMyEvent.publish(MY_EVENT, { myEventData });
我不喜欢这里的每个后端都会处理( publish(...) )所有事件,即使最后只有一个后端实际上会向 graphql 客户端发送订阅消息。
问题:如何有效地处理向 graphql 订阅客户端发送事件,同时具有可扩展的后端?当需要通知单个 websocket 连接时,也许不要打扰所有后端副本。我是否应该跟踪 Redis 中所有连接的客户端,以便 Redis 知道每个 graphql 订阅客户端的连接位置?
enter image description here

最佳答案

将发布的事件发送给订阅同一 channel 的所有客户端是 redis 的本质。
保持相同架构的一种可能解决方案是为每个用户使用不同的 channel ,而不是仅使用一个 channel 。支持者应该订阅 channel MY_EVENT + user.uuid一旦新用户连接并在用户断开连接后取消订阅同一 channel 。另一方面,一旦调用 webhook,该服务不应在全局 channel 上发布,而是在 MY_EVENT + user.uuid 上发布。 channel 。

关于javascript - 后端扩展时如何有效地向graphql订阅者发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62876833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com