0

我想知道 apache ignite 中是否有 AddressResolver 接口的示例用法。

我试图使用 AddressResolver 接口将我的本地 IP 地址(例如 192.168.10.101)“绑定”到我的外部 IP 地址,但没有运气。

当我这样做时,Ignite 服务器只是挂起(调试也没有输出)

我启动服务器的代码是:

TcpDiscoverySpi spi = new TcpDiscoverySpi();

TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();

ipFinder.setAddresses(ipaddresses);
spi.setIpFinder(ipFinder);
spi.setAddressResolver(new IotAddressResolver());
IgniteConfiguration cfg = new IgniteConfiguration();

// Override default discovery SPI.
cfg.setDiscoverySpi(spi);
System.setProperty("IGNITE_QUIET", "false");

// Start Ignite node.
ignite = Ignition.start(cfg);

我对 AddressResolver 的实现是:

public class IotAddressResolver implements AddressResolver {

    @Override
    public Collection<InetSocketAddress> getExternalAddresses(
            InetSocketAddress internalAddresses) throws IgniteCheckedException {

        String host = "XX.XX.XX.XX";


        Collection<InetSocketAddress> result = new ArrayList<InetSocketAddress>();
        result.add(new InetSocketAddress(host, internalAddresses.getPort()));
        return result;
    }

}

ignite 调试日志的最后一行是:

WARNING: Timed out waiting for message to be read (most probably, the reason is in long GC pauses on remote node) [curTimeout=9989]

我将不胜感激。谢谢

4

2 回答 2

1

您能否提供有关您的部署的更多详细信息以及您在地址解析器的帮助下尝试实现的目标?你有多少物理主机和 Ignite 节点?它们是否位于不同的网络中,它们之间有路由器?

于 2015-10-02T22:25:48.033 回答
0

我不知道这是否是处理此问题的最佳方法,但我设法将 igntie 作为本地服务器启动。我正在设置我的本地 ip 和端口,如下所示:

    System.setProperty("IGNITE_QUIET", "false");

    TcpDiscoverySpi spi = new TcpDiscoverySpi();
    TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
    TcpCommunicationSpi commSpi = new TcpCommunicationSpi();

    // Set initial IP addresses.
    ipFinder.setAddresses(ipaddresses);

    spi.setIpFinder(ipFinder);

    // Override local port.
    commSpi.setLocalPort(47501);
    commSpi.setLocalAddress("XX.XX.XX.XX");
    commSpi.setLocalPortRange(50);

    IgniteConfiguration cfg = new IgniteConfiguration();

    // Override default communication SPI.
    cfg.setCommunicationSpi(commSpi);
    cfg.setDiscoverySpi(spi);
    cfg.setAddressResolver(new IotAddressResolver());
    cfg.setClientMode(true);

    // Start Ignite node
    ignite = Ignition.start(cfg);

其中 XX.XX.XX.XX 是我的本地 IP 地址

于 2015-10-06T07:37:20.623 回答