Java 如何在Liferay 7.1上启用缓存复制。dxp1.0ga?

Java 如何在Liferay 7.1上启用缓存复制。dxp1.0ga?,java,liferay,wildfly,ehcache,jgroups,Java,Liferay,Wildfly,Ehcache,Jgroups,我有下一个环境: 具有群集许可证的Liferay 7.1 DXP(与wildfly 16.0捆绑) 此捆绑包在本地主机上的同一台机器(2个节点)上运行,但端口不同 每个节点都有相同的数据库(postgresql) 在机器上进行单独的运行弹性搜索 用于文档和媒体的共享文件夹 在portal-setup-wizard.properties中,我添加了“cluster.link.enabled=true”和“ehcache.replicator.properties.com.liferay.porta

我有下一个环境:

  • 具有群集许可证的Liferay 7.1 DXP(与wildfly 16.0捆绑)
  • 此捆绑包在本地主机上的同一台机器(2个节点)上运行,但端口不同
  • 每个节点都有相同的数据库(postgresql)
  • 在机器上进行单独的运行弹性搜索
  • 用于文档和媒体的共享文件夹
  • 在portal-setup-wizard.properties中,我添加了“cluster.link.enabled=true”和“ehcache.replicator.properties.com.liferay.portal.kernel.webserver.webserverservletoken=replicatePuts=true”以复制缓存 7.部署示例portlet以测试缓存复制
  • 我尝试了以下步骤来测试缓存复制:

  • 运行第一个节点
  • 然后运行第二个节点
  • 转到第一个节点的localhost
  • 转到第二个节点的localhost
  • 请参阅日志中的下一条消息:
  • [传入-2,liferay频道控制,WS-5459-64327][JGroupsReceiver:91] 接受视图合并视图:[WS-5459-18884 | 3](2)[WS-5459-18884, WS-5459-64327],2个亚组:[WS-5459-64327 | 1](2)[WS-5459-64327, WS-5459-18884],[WS-5459-18884 | 2](1)[WS-5459-18884]

  • 在第一个节点上的测试portlet中,通过调试模式,我通过MultiVMPoolUtil添加了缓存:
  • MultiVMPoolUtil.getPortalCache(“com.liferay.portal.kernel.webserver.WebServerServletToken”).put(“1”、“1”)

  • 在第二个节点中,我尝试从缓存中获取值:
  • MultiVMPoolUtil.getPortalCache(“com.liferay.portal.kernel.webserver.WebServerServletToken”).getKeys()

    但是第二个节点上的缓存上没有键“1”,但是如果我尝试使用相同的API删除,那么第一个节点上的.remove(“1”)将删除该值


    问题是如何为put操作配置缓存复制?

    ClusterLink不是这样工作的,它只是“使”缓存失效,而不是“复制”缓存:

    如果修改节点1上的对象“1”,节点2将收到“1”已更改的通知,并且如果缓存了此对象,则只需将其从自己的缓存中删除。只有在随后需要“1”的情况下,才会检测到缓存未命中,并从数据库(或其他持久存储)检索对象

    如果node2上没有人请求该对象,则node2上不会检索任何内容

    此外,如果node1上的缓存溢出(缓存不是无限的,事实上,它可能被配置为大小为0),您甚至不能假设您将能够永远从node1上的缓存检索此对象

    因此,您的观察是正确的:一个节点中的更改或删除将从所有缓存中删除具有给定密钥的对象。这就是它的实现方式,它非常有用:不需要缓存您可能永远不会在给定机器上访问的内容

    我相信我很久以前就听说过实际的缓存复制,例如,它可能是可配置的。但我从来没有尝试过,因为它只是不需要,并且无效并不会带来巨大的负担