【问题标题】:How can I cluster application-scope state in wildfly?如何在 Wildfly 中集群应用程序范围状态?
【发布时间】:2020-03-28 02:17:09
【问题描述】:

我想对保留在应用程序级范围内的地图进行聚类。

第一个想法是使用 @Singleton@Clustered bean 和包含我的数据的字段。
这似乎不起作用,我猜是never implemented

This post 提出了实现集群单例的方法,但它们看起来很复杂。

除了手动更新数据库表之外,我看到的唯一替代方法是使用复制缓存。

我的问题是: 是否建议声明并使用 infinispan 缓存(如 this)来解决此问题?
如果是,我应该使用什么设置来避免脏读?
在wildfly-18时代,这个相对简单的问题还有其他选择吗?

【问题讨论】:

    标签: jakarta-ee wildfly infinispan jcache wildfly-cluster


    【解决方案1】:

    Diego 的回复假定您使用的是 Infinispan 分发的 WF 模块(注意 datagrid-infinispan 命名空间)。

    要使用在 WF 的 Infinispan 子系统中定义的任意 Infinispan 缓存,请使用以下形式的 jndi 名称:java:jboss/infinispan/cache/your-container-name/your-cache-name

    例如

    @Resource(lookup="java:jboss/infinispan/cache/foo/bar")
    private Cache<K, V> cache;
    

    WF 将管理缓存的生命周期,确保它在必要时启动/停止。

    【讨论】:

    • 这会自动分布在集群的各个节点上吗?
    • 缓存的行为基于其配置,在 infinispan 子系统中定义。
    【解决方案2】:

    正如你提到的集群,你需要使用standalone-full-ha.xml

    编辑文件并添加以下配置

    <cache-container module="org.infinispan.extension" name="infinispan_container" default-cache="default">
        <transport lock-timeout="60000"/>
        <global-state/>
        <distributed-cache name="default"/>
        <local-cache name="localCache"/>
        <replicated-cache name="replicatedCache"/>
    </cache-container>
    

    您的应用程序可以使用不同的缓存,如果您希望使用复制缓存,可以将其注入到您的应用程序中

    @Resource(lookup = "java:jboss/datagrid-infinispan/container/infinispan_container/cache/replicatedCache")
    Cache cache;
    

    【讨论】:

    • "你需要使用standalone-full.xml":我猜你的意思是standalone-ha.xmlstandalone-full-ha.xml
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2013-01-17
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多