我的应用程序有超过 1 个实例,每个实例都有其状态存储,我们在其中存储(键、值)信息,应用程序将使用这些信息进行功能处理。 我们的要求是通过检查应用程序的所有实例来从状态存储中删除特定条目。 如何从所有实例状态存储中删除所需的密钥?
我们使用控制器和服务类实现了 REST API,但此实现仅从一个实例中删除值,而不是从应用程序所有实例中存在的状态存储中删除。
code from controller
@DeleteMapping("/clear")
public void delete_from_store() {
service.clearValues(@RequestParam String storeName, @RequestParam List<String> keys);
}
type here
来自服务的代码
public void clearValues(String name, List<String> keys) {
List<TimestampedKeyValueStore<String, ?>> store = storeMap.get(name);
for (String key : keys) {
store.delete(key)
}
作为此处的解决方案,因为您已经在应用程序中使用了 Kafka 和 KafkaStreams,所以您可以添加一个新主题“deletion-topic”,当其余端点收到删除记录的调用时,该记录的键将被发送到删除主题,删除主题应与从状态存储中删除密钥的处理器连接。它将从所有实例的状态存储中删除。