首页 > 解决方案 > Apache Ignite,C#:分布式计算 - 拓扑投影错误

问题描述

我正在尝试模拟 Apache 文档中的分布式计算示例,特别是广播示例

我远程启动集群,其中 2 个节点使用以下 XML 配置文件组成集群:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <!-- In distributed environment, replace with actual host IP address. -->
                                <value>[remoteHost]:47500..47509</value>
                                <value>[localHost1]:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

然后,我在本地启动一个 IP 地址为 [localHost1] 的节点:

class PrintNodeIdAction : IComputeAction
    {
        public void Invoke()
        {
            Console.WriteLine("Hello node: " +
                              Ignition.GetIgnite().GetCluster().GetLocalNode().Id);
        }
    }
            
static void Main(string[] args)
            {
                var cfg = new IgniteConfiguration
                {
                    DiscoverySpi = new TcpDiscoverySpi
                    {
                        IpFinder = new TcpDiscoveryStaticIpFinder
                        {
                            Endpoints = new[] { "[remoteHost]", "[remoteHost]:47500..47509" }
                        }
                    }
                };
    
                using (IIgnite ignite = Ignition.Start(cfg))
                {
                    // Limit broadcast to remote nodes only.
                    var compute = ignite.GetCluster().ForRemotes().GetCompute();
                    
                    // Print out hello message on remote nodes in the cluster group.
                    compute.Broadcast(new PrintNodeIdAction());
                }
            }

但是,在启动本地节点后,我遇到了以下两 (2) 个错误:

**1 of 2**
ClusterGroupEmptyException: Topology projection is empty.

**2 of 2**
JavaException: class org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException: Topology projection is empty.
    at org.apache.ignite.internal.processors.task.GridTaskWorker.getTaskTopology(GridTaskWorker.java:688)
    at org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:503)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:830)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:498)
    at org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:466)
    at org.apache.ignite.internal.IgniteComputeImpl.executeAsync0(IgniteComputeImpl.java:564)
    at org.apache.ignite.internal.processors.platform.compute.PlatformCompute.executeNative0(PlatformCompute.java:329)
    at org.apache.ignite.internal.processors.platform.compute.PlatformCompute.processClosures(PlatformCompute.java:294)
    at org.apache.ignite.internal.processors.platform.compute.PlatformCompute.processInStreamOutObject(PlatformCompute.java:140)
    at org.apache.ignite.internal.processors.platform.PlatformTargetProxyImpl.inStreamOutObject(PlatformTargetProxyImpl.java:79)

标签: c#distributed-computingignite

解决方案


推荐阅读