我们目前正在将Apache Ignite集成到我们的应用程序中,以在群集中共享会话。
此时我们可以成功地在两个本地tomcat实例之间共享会话,但是有一个用例,到目前为止还没有用。
使用完全相同的代码运行两个本地实例时,一切都很好。但是当Ignite逻辑集成到我们的生产集群中时,我们会遇到以下用例:
当在同一网格中使用两个tomcat实例在本地再现此用例时,Ignite Web会话群集将失败。我测试的是删除一个' String属性'属于用户会话的类(配置文件)。使用此更改的类启动节点1 时,出现以下异常:
Caused by: java.lang.ClassNotFoundException:
Optimized stream class checksum mismatch
(is same version of marshalled class present on all nodes?) [expected=4981, actual=-27920, cls=class nl.package.profile.Profile]
这将是我们部署的常见/常规用例。我的问题是:如何处理这个用例? Ignite有办法解决/解决这类问题吗?
答案 0 :(得分:0)
根据我的理解,您的用例非常适合Ignite Binary对象[1]。 此功能允许以无类格式存储对象,并在运行时修改对象结构,而无需在更改对象版本时完全重新启动集群。
您的Person类应该实现org.apache.ignite.binary.Binarylizable接口,它将为您提供对序列化和反序列化逻辑的完全控制。使用此接口,您甚至可以在集群中有两个节点,在反序列化和放大时使用不同版本的Person类。通过从/向二进制格式读取/写入所需字段的序列化时间。