![](/img/trans.png)
[英]Google Cloud Pub/Sub with ordering keys & multiple consumers on same subscription
[英]Google Cloud Pub/Sub and multiple receivers
我的用例是这样的:
我有 X 个 App Engine NodeJS 后端实例。 我使用 Redis Cloud Memorystore 作为缓存层。 为了最大限度地减少 Redis 的使用并提高性能,每个后端实例也有自己的本地缓存。
规则是这样的,当请求进入后端实例时:
本地缓存比 Redis 缓存超时快得多,但我仍然希望能够向所有实例发送“清除缓存”消息。
整个过程运行得非常好,但我希望能够通过发送发布/订阅消息来更新本地缓存,所有后端实例都会收到该消息,从而清除本地缓存。
是的,我可以选择不使用本地缓存而只使用 Redis MemoryStore,但这意味着每次 Redis 查找的网络流量、较慢的响应以及更多的 Redis 资源使用。
这有可能吗,还是每条推送的消息只有 1 个接收者? 我知道接收者可以选择不确认消息,但是如何确保所有实例都已收到,以及如何知道已经发生,所以最后一个实例可以发送确认? 似乎不可能
您的用例并不常见,但 IMO,您有 2 个解决方案:
将清除缓存日期时间放入 redis。对于每个请求,App Engine 实例都会调用清除缓存日期时间。 如果本地值(之前的清缓存值,如果没有先例调用(新实例案例)则为null)落后于Redis值,则清空本地缓存。 否则继续
(不是我的首选)当实例启动时,在 PubSub 主题上创建请求订阅。 拉取消息。 当您收到一个时,清除缓存。
使用 PubSub,当您在主题中发布消息时,它会在所有订阅中复制。 使用该模式,所有实例都将有订阅并可以接收消息。
但是,您可能会达到订阅配额的数量。 要限制这一点,请将过期值设置为 1 天,以在 1 天后自动清除没有任何订阅者的订阅。
不确定 App Engine 实例上是否有拆卸通知,让您有时间很好地删除订阅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.