gpt4 book ai didi

java - 管理 hazelcast 中模型对象的更改?

转载 作者:行者123 更新时间:2023-11-30 08:10:45 24 4
gpt4 key购买 nike

系统的总体架构是连接到 hazelcast 的轻量级应用服务器以及两者之间的公共(public)模型依赖关系。该应用程序可以关闭,但业务要求 hazelcast 集群必须在升级之间保持运行(以免丢失上下文 session 数据)。

如果我在 hazelcast 中定义了一个 map :

        <hz:map name="Fruit"
backup-count="${hazelcast.default.backup-count}"
time-to-live-seconds="${hazelcast.default.time-to-live-seconds}"
max-idle-seconds="${hazelcast.default.max-idle-seconds}"
eviction-policy="${hazelcast.default.eviction-policy}"
max-size="${hazelcast.default.max-size}"
eviction-percentage="${hazelcast.default.eviction-percentage}"
in-memory-format="${hazelcast.in-memory-format}"/>

其中存储了一个名为 Fruit 的类:

public class Fruit implements Serializable {

private static final long serialVersionUID = -7184021704842980361;

//some fields and methods
}

假设应用程序的 v1、模型和 hazelcast 服务器都已部署并且在生产环境中运行良好。然后新的需求出现了,我不得不对 Fruit 类进行更改(更新 serialVersionUID 以表示对类的更改):

private static final long serialVersionUID = -5284413340344918080L;

public boolean isPoisonous(){
return determineToxicityOnHumans();
}

问题是,当我部署依赖于模型 v2 的新版本的 api(存在 Fruit 类的地方)时,出现异常:

com.hazelcast.nio.serialization.HazelcastSerializationException: java.io.InvalidClassException: 

io.anew.hz.model.Fruit; local class incompatible: stream classdesc serialVersionUID = -5284413340344918080, local class serialVersionUID = -7184021704842980361

这对我来说很有意义,因为 serialVersionUID 已从版本 1 更改为版本 2。我设想并且目前正在努力解决的问题是在不导致集群停机的情况下管理此更改。

我的问题是:其他人在管理对 hazelcast 对象依赖项的模型更改方面有哪些经验?管理集群的不同模型更改有哪些工作策略?迁移是一种有效的策略吗?

最佳答案

您可能想看看可以处理版本控制的自定义序列化程序。所以通过在序列化时向流中添加一个版本,您就知道在反序列化时如何处理它。

寻找 (Identified)DataSerializable、StreamSerializer 和 Portable。 https://github.com/hazelcast/hazelcast-code-samples/tree/master/serialization

关于java - 管理 hazelcast 中模型对象的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518838/

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