【发布时间】:2018-12-12 17:49:11
【问题描述】:
我有以下情况,我有一个微服务架构,有一个 api 网关和多个下游服务,其中一些有一个独立的会话,这导致我的系统在随机服务调用时抛出过期会话异常。
由于我们无法从头开始重写这些服务,我们从引入 hazelcast 开始,以便所有服务可以共享同一个会话。
现在的问题是,当服务写入其他服务在其类路径中没有的类的对象时,会引发反序列化异常。
为了解决这个问题,我在想,如果只有从服务访问的属性被反序列化,我可能会避免异常,并且一切都应该正常工作。
您知道春季会议是否可以做到这一点,或者可以建议另一种解决方案,让我解决最初的问题?
这是一个重现我的问题的示例项目:https://github.com/deathcoder/hazelcast-shared-session
【问题讨论】:
-
如果您访问整个会话或会话中的特定值,您应该会看到此问题。是这样吗?
-
在第二次检查中,似乎 Spring 在每个请求上都通过 id 访问整个会话。
-
我在插入对象后立即看到反序列化异常,似乎 hazelcast 试图尽快更新,如果有人想尝试的话,明天我可以提供一个示例项目
-
当然,那真的很有帮助。
-
使用不同的序列化策略 - 不涉及 Java 序列化的策略(尤其是因为它很慢,体积庞大,而且正如您所学的那样非常脆弱)。例如,序列化为 JSON 并忽略未知属性。最好使用为向后和向前兼容性而设计的真正方案,例如 Avro 或 Protobuf.TL;DR:停止尝试破解简单的解决方案并实际进行一些工程。
标签: java hazelcast spring-session