2015-10-02 2 views
0

Мне было интересно, есть ли пример использования интерфейса AddressResolver в apache ignite.Правильное использование интерфейса AddressResolver

Я пытался привязать свои локальные IP-адреса (например, 192.168.10.101) к своему внешнему IP-адресу, используя интерфейс AddressResolver, но не повезло.

Когда я что сервер 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; 
    } 

} 

Последней линией журнала отладки зажигания является:

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

Буду признателен за любую помощь. Спасибо

ответ

1

Можете ли вы предоставить более подробную информацию о своем развертывании и о том, чего вы пытаетесь достичь, с помощью адресатора? Сколько физических хостов и узлов Ignite у вас есть? Они расположены в разных сетях с маршрутизатором между ними?

+0

В деталях - У меня есть 2 серверов узлов, развернутых на VPS, которые работают правильно. –

+0

Я хочу использовать Address Resolver, чтобы иметь возможность запускать Ignite в режиме клиента на моем локальном компьютере, поэтому я могу запускать тесты на узлах, которые работают на VPS. Моя локальная машина работает в локальной сети с одним открытым IP-адресом для всей сети. Я использую перенаправление портов в маршрутизаторе, чтобы иметь возможность правильно «маршрутизировать» пакеты на локальный компьютер. –

+0

Также в моих свойствах приложения поле addesses: ipaddresses = XX.XX.XX.XX: 47501..47510, где XX.XX.XX.XX является общедоступным адресом моей локальной сети –

0

Я не знаю, если это лучший способ справиться с этим, но мне удалось запустить ignitie как локальный сервер. Я настраиваю мой локальный 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-адрес

Смежные вопросы