出现此错误的原因是在计算亲和力之前,需要先获取拓扑版本的亲和力。以下是一个解决此问题的示例代码:
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.affinity.Affinity;
import org.apache.ignite.cluster.ClusterTopologyException;
public class ApacheIgniteExample {
public static void main(String[] args) {
try (Ignite ignite = Ignition.start()) {
IgniteCache cache = ignite.getOrCreateCache("myCache");
// 获取亲和力
Affinity affinity = ignite.affinity("myCache");
try {
// 在计算亲和力之前获取拓扑版本的亲和力
affinity.readyTopologyVersion();
// 进行计算亲和力的操作
// ...
} catch (ClusterTopologyException e) {
System.err.println("Failed to get topology version: " + e.getMessage());
e.printStackTrace();
} catch (IgniteException e) {
System.err.println("Failed to perform affinity calculation: " + e.getMessage());
e.printStackTrace();
}
}
}
}
在上述示例中,首先创建了一个Ignite实例,并获取或创建了一个名为"myCache"的缓存。然后,通过ignite.affinity("myCache")
方法获取了亲和力对象。在计算亲和力之前,我们调用了affinity.readyTopologyVersion()
方法来获取拓扑版本的亲和力。如果在获取拓扑版本时发生错误,将抛出ClusterTopologyException
异常。如果在计算亲和力时发生错误,将抛出IgniteException
异常。