首页 > 解决方案 > 使用 Spring 和 Redis 的 Vaadin 在慢速环境中加载之前的 UI 状态

问题描述

我在 spring boot + vaadin 应用程序中成功启用了 redis,它在我的计算机上运行良好。该应用程序在较慢的环境中进行测试运行,并且多次出现错误。

WARN  c.v.s.communication.ServerRpcHandler [ServerRpcHandler.java : 266] - Unexpected message id from the client. Expected: 248, got: 249

当 VaadinSession 的序列化/反序列化花费太长时间时,似乎会发生这种情况。例如,我有一个包含多个复选框的页面。我点击第一个,然后是第二个和第三个。在此之后,上面的警告被抛出并出现页面的先前状态。在这种情况下,它可能没有任何选中的复选框或带有一两个选中的复选框。在极少数情况下,它可以正常工作。

我想不出解决问题的办法。我尝试过的一件事是立即显示加载指示器(100 毫秒)(默认是加载 300 毫秒后),但这并不能解决问题。

我可以以某种方式配置何时发生序列化/反序列化而不是每次 UI 更改,或者通过将部分 VaadinSession 排除在外来使其更快?(我需要当前页面上的数据,所以我不能让 ui 组件瞬态。)

标签: javaspringserializationredisvaadin

解决方案


我们就我工作场所的问题进行了讨论,我们认为这些组件工作正常。当序列化比下一个请求的反序列化慢时,就会出现问题。(每个 UI 更改都从反序列化开始,以获取最新状态,然后序列化修改后的状态。)我的解决方案是创建一个切面,用于存储发送用于序列化的最新 VaadinSession,并将每个反序列化的 VaadinSession 与存储的 VaadinSession 进行比较。我保留 lastProcessedClientToServerId 较高的那个。这几乎每次都能解决问题。


推荐阅读