带有 spring 的嵌入式 Ignite 从不调用自定义 SegmentationResolver

问题描述 投票:0回答:2

我尝试在嵌入 tomcat web 应用程序的 Ignite 集群中管理网络分段。我创建了一个自定义的分段解析器来 ping 数据库服务器。

所以我使用 spring 上下文配置 Ignite

<beans:bean id="segmentationResolver" class="my.cluster.JdbcPingSegmentationResolver"/>
<beans:bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <beans:property name="gridLogger">
        <beans:bean class="org.apache.ignite.logger.slf4j.Slf4jLogger"/>
    </beans:property>
    <beans:property name="workDirectory" value="#{systemProperties[igniteTmpDir]}"/>
    <beans:property name="segmentationResolvers" ref="segmentationResolver" />
    <beans:property name="segmentCheckFrequency" value="10000" />
    <beans:property name="segmentationPolicy" value="NOOP" />
    <beans:property name="waitForSegmentOnStart" value="true" />
    <beans:property name="communicationSpi">....

我的 JdbcPingSegmentationResolver 的构造函数由 spring 调用,但其方法 isValidSegment() 从未被调用。即使我启动/停止另一个 Ignite 节点(当集群拓扑发生变化时必须调用它)。

 @Override
    public boolean isValidSegment() throws IgniteCheckedException {
        var reachable = false;
        try {
            Process exec = Runtime.getRuntime().exec("ping " + hostname);
            //0 - normal termination
            reachable = exec.waitFor(1, TimeUnit.SECONDS);
        } catch (IOException | InterruptedException e) {
            LOGGER.error("segmentation network : {}", e.getMessage(), e);
        }
        LOGGER.debug("check segmentation network status : {}", reachable);
        return reachable;
    }
spring tomcat ignite
2个回答
0
投票

分段解析器由

GridSegmentationProcessor
调用。默认处理器是
org.apache.ignite.internal.processors.segmentation.os.GridOsSegmentationProcessor
,实际上是 noop。 GridGain Enterprise Edition(它是供应商支持的 Apache Ignite 交付)指定了正确处理解析器的处理器。

我相信在拓扑更改(节点离开、加入等)时调用的机制是拓扑验证器


-1
投票

Ignite 2.16.0 中还存在这个问题吗?文档从未告诉您使用 GridSegmentationProcessor。

© www.soinside.com 2019 - 2024. All rights reserved.