ignite配置文件编写

下载地址:https://ignite.apache.org/download.cgi

git地址:https://github.com/apache/ignite

中文学习网站:https://liyuj.gitee.io/

 

xml文件配置;

<!-- 配置缓存 -->
    <bean id="cacheConfiguration" class="org.apache.ignite.configuration.CacheConfiguration">
        <!-- 配置缓存的名字 -->
        <property name="name" value="hzy"/>
        <!-- 配置缓存模式
        REPLICATED:复制模式,写入慢,读取快。
        PARTITIONED:分区模式,写入快,读取慢。 -->

        <property name="cacheMode" value="REPLICATED"/>
        <!-- 配置备份个数 -->
        <property name="backups" value="1"/>
        
    </bean>
    
    <bean id="discoverySpi" class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
          <property name="localPort" value="47500"/>  <!-- 端口 -->
          <property name="localPortRange" value="5"/>  <!-- 节点个数 -->
        <property name="ipFinder">   <!-- 地址 -->
          <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
            <property name="addresses">
              <list>
                <value>127.0.0.1:47500..47504</value>
              </list>
            </property>
          </bean>
        </property>
      </bean>
    
    <bean id="igniteConfiguration" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="clientMode" value="true"/>  <!-- 是否为客户端 -->
        <property name="cacheConfiguration" ref="cacheConfiguration"/>   <!-- 添加缓存配置 -->
        <property name="discoverySpi" ref="discoverySpi"/>  
        
    </bean>

测试:

@Test
    public void domel01() {
        ApplicationContext ac=new ClassPathXmlApplicationContext("ApplicationContext.xml");    //加载配置文件
        IgniteConfiguration cfg = (IgniteConfiguration) ac.getBean("igniteConfiguration");     //从spring容器中获取igniteconfigruation
        Ignite ignite = Ignition.start(cfg);      //通过自定义配置启动ignite
        IgniteCache<String, Object> cache = ignite.cache("hzy");       //获取缓存名为hzy的缓存
        cache.put("a", 10);         //向缓存添加key:a value:10的数据
        System.out.println(cache.get("a"));      //获取打印
    }

结果

java程序配置

@Configuration
public class IgniteConfig {
    
    @Bean
    public CacheConfiguration<String, Deque<Serializable>> getCacheConfigruation(){
        CacheConfiguration<String, Deque<Serializable>> cfg = new CacheConfiguration<>();
        cfg.setName("hzy");  //缓存的名字
        cfg.setCacheMode(CacheMode.REPLICATED);  //分区模式
        cfg.setBackups(1);// 设置备份的数量
        cfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.DAYS, 3)));// 过期时间为三天
        return cfg;
    }
    
    @Bean
    public DiscoverySpi discoverySpi() {
        TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
        discoverySpi.setLocalPort(47500);   //端口
        discoverySpi.setLocalPortRange(5);   //节点个数
        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
        List<String> addresses = new ArrayList<>();    
        addresses.add("127.0.0.1:47500..47504");     //地址
        ipFinder.setAddresses(addresses);
        discoverySpi.setIpFinder(ipFinder);
        //discoverySpi.setForceServerMode(true);
        return discoverySpi;
    }
    
    @Bean
    public IgniteConfiguration getIgniteConfiguration(CacheConfiguration<String, Deque<Serializable>> cacheCfg,DiscoverySpi aisp) {
        IgniteConfiguration cfg = new IgniteConfiguration();
        cfg.setClientMode(true);  //这里用ignite客户端连接服务端节点
        //cfg.setPeerClassLoadingEnabled(true);    // 启用Peer类加载器
        cfg.setCacheConfiguration(cacheCfg);   //添加缓存配置
        cfg.setDiscoverySpi(aisp);     //添加发现者信息
        return cfg;
    }
    
    @Bean
    public Ignite getIgnite(IgniteConfiguration cfg) {
        //通过自定义配置启动ignite
        return Ignition.start(cfg);
    }
}

 

### 使用 RendezvousAffinityFunction 将特定的 `site` 分配到多个分区 在 Apache Ignite 中,可以通过配置 `<affinity>` 节点属性来控制数据的分区行为。RendezvousAffinityFunction 是一种常用的亲和力函数,能够将键值对分配到不同的分区中。为了将特定的 `site` 映射到多个分区,可以按照以下方式进行 XML 配置。 #### 基础概念说明 RendezvousAffinityFunction 默认会根据哈希算法将键值对均匀分布在各个分区上。如果需要让某个特定的 `site` 出现在多个分区中,则可以通过自定义键的方式实现这一目标。例如,可以在应用程序层面为同一个 `site` 创建多个变体键,并确保这些键被映射到不同的分区[^2]。 #### 自定义 Affinity Key Mapper Ignite 提供了 `AffinityKeyMapper` 接口,允许开发者定义如何将对象映射到分区。下面是一个示例配置,展示了如何通过 XML 文件设置 RendezvousAffinityFunction 并结合自定义的 `AffinityKeyMapper` 来满足需求: ```xml <bean class="org.apache.ignite.configuration.CacheConfiguration"> <!-- 设置缓存名称 --> <property name="name" value="mySiteCache"/> <!-- 定义分区数 --> <property name="cacheMode" value="PARTITIONED"/> <property name="backups" value="1"/> <!-- 配置 RendezvousAffinityFunction --> <property name="affinity"> <bean class="org.apache.ignite.cache.affinity.RendezvousAffinityFunction"> <constructor-arg index="0" value="false"/> <!-- 是否排除近缓存备份 --> <constructor-arg index="1" value="32"/> <!-- 分区总数 --> <!-- 可选:添加自定义 AffinityKeyMapper --> <property name="affinityKeyMapper"> <bean class="com.example.CustomAffinityKeyMapper"/> </property> </bean> </property> </bean> ``` 在此配置中: - `RendezvousAffinityFunction` 的第二个参数指定了总分区数(此处设为 32)。可以根据实际场景调整这个数值。 - 如果需要进一步定制键与分区的关系,还可以引入 `CustomAffinityKeyMapper` 类来自定义逻辑[^1]。 #### 编写 CustomAffinityKeyMapper 示例代码 假设我们有一个名为 `siteA` 的站点,希望通过某种规则将其关联的数据分布到多个分区中。那么可以编写如下 Java 实现: ```java public class CustomAffinityKeyMapper implements AffinityKeyMapper { @Override public Object affinityKey(Object key) { if (key instanceof SiteData) { // 假定 SiteData 表示站点相关数据结构 SiteData site = (SiteData) key; // 对于 siteA,返回带有编号的子键以分散其数据 if ("siteA".equals(site.getName())) { return "siteA-" + Math.abs(key.hashCode() % 8); // 散列到最多 8 个分区 } // 其他站点保持默认行为 return null; } return null; // 返回 null 表示不改变原生映射关系 } } ``` 这段代码实现了这样一个功能:当处理的对象属于 `siteA` 时,为其生成一组新的复合键(如 `"siteA-0"` 至 `"siteA-7"`),从而使它们落入不同分区之中;而对于其他站点,则维持原有的一致性散列机制不变[^4]。 #### 注意事项 - 上述方法依赖于程序级干预而非单纯依靠静态配置完成任务。因此,在实施之前应仔细测试并确认不会破坏现有业务逻辑。 - 修改配置文件后记得重启整个集群以便使改动生效。 - 如果涉及频繁变更或者复杂的动态调度需求,考虑采用更高级别的 API 或者插件扩展框架替代简单的 XML 描述方式。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值