Spring-Data-Gemfire - Невозможно связаться со службой локатора. Время действия истекло, или локатор не существует

Я хочу подключиться к существующему локатору.
Теперь у меня нет клиент-сервера.

Я запустил локатор, порт - 40001, порт server1 - 40411.


    gfsh>list members
     Name   | Id
    ------- | ----------------------------------------------
    test1   | 192.168.1.106(test1:1880:locator):1024
    server1 | 192.168.1.106(server1:7532):1025

Конфигурация:


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:gfe-data="http://www.springframework.org/schema/data/gemfire"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:gfe="http://www.springframework.org/schema/gemfire"
      xmlns:repository="http://www.springframework.org/schema/data/repository"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/data/gemfire http://www.springframework.org/schema/data/gemfire/spring-data-gemfire.xsd
      http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/data/repository/spring-repository.xsd
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

        <util:properties id="gemfireProperties">
            <prop key="locators">localhost[40001]
            <prop key="mcast-port">0
        </util:properties>

        <gfe:cache properties-ref="gemfireProperties"/>

        <gfe:cache-server port="40411" />

        <bean id="portGenerator" class="com.demo.server.ServerPortGenerator" />

        <gfe:replicated-region id="Person"/>

    </beans>


Ошибка:


    [info 2017/07/04 23:48:12.546 CST  tid=0x1] Defaulting license-working-dir to current working directory "C:\Users\IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\demo".

    [info 2017/07/04 23:48:12.547 CST  tid=0x1] Licensing required 2 milliseconds.

    [info 2017/07/04 23:48:12.923 CST  tid=0x1] GemFire P2P Listener started on  tcp:///192.168.1.106:53073

    [info 2017/07/04 23:48:13.094 CST  tid=0x20] unable to connect to locator  localhost(null):40001

    2017-07-04 23:48:16.200  WARN 10904 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireServer': Cannot resolve reference to bean 'gemfireCache' while setting bean property 'cache'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': FactoryBean threw exception on object creation; nested exception is com.gemstone.gemfire.GemFireConfigException: Unable to contact a Locator service.  Operation either timed out or Locator does not exist.  Configured list of locators is "[localhost(null):40001]".
    2017-07-04 23:48:16.200  WARN 10904 --- [           main] o.s.b.f.support.DisposableBeanAdapter    : Invocation of destroy method failed on bean with name 'gemfireCache': com.gemstone.gemfire.cache.CacheClosedException: A cache has not yet been created.
    2017-07-04 23:48:16.219 ERROR 10904 --- [           main] o.s.boot.SpringApplication               : Application startup failed

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireServer': Cannot resolve reference to bean 'gemfireCache' while setting bean property 'cache'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': FactoryBean threw exception on object creation; nested exception is com.gemstone.gemfire.GemFireConfigException: Unable to contact a Locator service.  Operation either timed out or Locator does not exist.  Configured list of locators is "[localhost(null):40001]".
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1531) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1276) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at com.demo.server.ServerApplication.main(ServerApplication.java:32) [classes/:na]
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': FactoryBean threw exception on object creation; nested exception is com.gemstone.gemfire.GemFireConfigException: Unable to contact a Locator service.  Operation either timed out or Locator does not exist.  Configured list of locators is "[localhost(null):40001]".
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:175) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1634) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:254) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        ... 16 common frames omitted
    Caused by: com.gemstone.gemfire.GemFireConfigException: Unable to contact a Locator service.  Operation either timed out or Locator does not exist.  Configured list of locators is "[localhost(null):40001]".
        at com.gemstone.org.jgroups.protocols.TCPGOSSIP.sendGetMembersRequest(TCPGOSSIP.java:222) ~[gemfire-8.2.4.jar:na]
        at com.gemstone.org.jgroups.protocols.PingSender.run(PingSender.java:85) ~[gemfire-8.2.4.jar:na]
        at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_111]

Боже мой, я понятия не имею об этой проблеме.
Кто может мне помочь?
Я просто хочу построить систему клиент-сервер.
Но теперь я даже не смог настроить сервер.


Обновление от 9 июля 2017 г.

Здравствуйте, Джон, я попробовал ваш пример, но все равно обнаружил ошибку.

Сначала я использую gfsh для запуска локатора.


    C:\Users\IBM_ADMIN>gfsh
        _________________________     __
       / _____/ ______/ ______/ /____/ /
      / /  __/ /___  /_____  / _____  /
     / /__/ / ____/  _____/ / /    / /
    /______/_/      /______/_/    /_/    9.0.4

    Monitor and Manage Pivotal GemFire
    gfsh>start locator --name=GemFireLocator --log-level=config
    Starting a Geode Locator in C:\Users\IBM_ADMIN\GemFireLocator...
    ......
    Locator in C:\Users\IBM_ADMIN\GemFireLocator on ADMINIB-CI3Q48M[10334] as GemFireLocator is currently online.
    Process ID: 7256
    Uptime: 8 seconds
    GemFire Version: 9.0.4
    Java Version: 1.8.0_101
    Log File: C:\Users\IBM_ADMIN\GemFireLocator\GemFireLocator.log
    JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire
    .log-level=config -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterva
    l=9223372036854775806
    Class-Path: C:\Program Files\Java\pivotal-gemfire-9.0.4\lib\geode-core-9.0.4.jar;C:\Program Files\Java\pivotal-gemfire-9
    .0.4\lib\geode-dependencies.jar

    Successfully connected to: JMX Manager [host=ADMINIB-CI3Q48M, port=1099]

    gfsh>list members
         Name      | Id
    -------------- | -------------------------------------------------------
    GemFireLocator | 192.168.1.106(GemFireLocator:7256:locator):1024

    gfsh>describe member --name=GemFireLocator
    Name        : GemFireLocator
    Id          : 192.168.1.106(GemFireLocator:7256:locator):1024
    Host        : ADMINIB-CI3Q48M
    Regions     :
    PID         : 7256
    Groups      :
    Used Heap   : 90M
    Max Heap    : 1755M
    Working Dir : C:\Users\IBM_ADMIN\GemFireLocator
    Log file    : C:\Users\IBM_ADMIN\GemFireLocator\GemFireLocator.log
    Locators    : 192.168.1.106[10334]

И затем, как вы упомянули в spring-boot-gemfire-server-example, я попытался запустить $ gradlew bootRun.

Но ошибка показывает: Причина: java.net.BindException: Адрес уже используется: JVM_Bind

    [info 2017/07/09 14:57:24.270 CST  tid=0x1] Defaulting license-working-dir to current working directory "C:\Users
    IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example".

    [info 2017/07/09 14:57:24.273 CST  tid=0x1] Licensing required 4 milliseconds.

    [info 2017/07/09 14:57:24.324 CST  tid=0x1] Starting peer location for Distribution Locator on localhost/127.0.0.
    [10334]

    [info 2017/07/09 14:57:24.333 CST  tid=0x1] Starting Distribution Locator on localhost/127.0.0.1[10334]

    [info 2017/07/09 14:57:24.347 CST  tid=0x1] Distribution Locator on localhost/127.0.0.1[10334]  is stopped

    [main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during co
    text initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Err
    r creating bean with name 'gemfireCacheServer' defined in org.example.SpringBootGemFireServer: Unsatisfied dependency e
    pressed through method 'gemfireCacheServer' parameter 0; nested exception is org.springframework.beans.factory.BeanCrea
    ionException: Error creating bean with name 'gemfireCache': FactoryBean threw exception on object creation; nested exce
    tion is com.gemstone.gemfire.GemFireIOException: Problem starting a locator service
    [main] WARN org.springframework.beans.factory.support.DisposableBeanAdapter - Invocation of destroy method failed on be
    n with name 'gemfireCache': com.gemstone.gemfire.cache.CacheClosedException: A cache has not yet been created.
    [main] INFO org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer -

    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enable
    .
    [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gemfireCacheServer' de
    ined in org.example.SpringBootGemFireServer: Unsatisfied dependency expressed through method 'gemfireCacheServer' param
    ter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemf
    reCache': FactoryBean threw exception on object creation; nested exception is com.gemstone.gemfire.GemFireIOException:
    roblem starting a locator service
            at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:7
    9)
            at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResol
    er.java:467)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(A
    stractAutowireCapableBeanFactory.java:1128)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAuto
    ireCapableBeanFactory.java:1022)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCa
    ableBeanFactory.java:512)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapa
    leBeanFactory.java:482)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
            at org.springframework.beans.factory.suefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.ja
    a:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListabl
    BeanFactory.java:735)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractAppli
    ationContext.java:866)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761)
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
            at org.example.SpringBootGemFireServer.main(SpringBootGemFireServer.java:52)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gemfireCache': Facto
    yBean threw exception on object creation; nested exception is com.gemstone.gemfire.GemFireIOException: Problem starting
    a locator service
            at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanR
    gistrySupport.java:175)
            at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanReg
    strySupport.java:103)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.j
    va:1606)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:317)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
         rg.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBean
    actory.java:1131)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFa
    tory.java:1059)
            at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.j
    va:835)
            at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:7
    1)
            ... 18 more
    Caused by: com.gemstone.gemfire.GemFireIOException: Problem starting a locator service
            at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.startInitLocator(InternalDistributedSyst
    m.java:847)
            at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.initialize(InternalDistributedSystem.jav
    :606)
            at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.newInstance(InternalDistributedSystem.ja
    a:281)
            at com.gemstone.gemfire.distributed.DistributedSystem.connect(DistributedSystem.java:1651)
            at com.gemstone.gemfire.cache.CacheFactory.create(CacheFactory.java:227)
            at org.springframework.data.gemfire.CacheFactoryBean.createCache(CacheFactoryBean.java:356)
            at org.springframework.data.gemfire.CacheFactoryBean.resolveCache(CacheFactoryBean.java:250)
            at org.springframework.data.gemfire.CacheFactoryBean.init(CacheFactoryBean.java:191)
            at org.springframework.data.gemfire.CacheFactoryBean.getObject(CacheFactoryBean.java:178)
            at org.springframework.data.gemfire.CacheFactoryBean.getObject(CacheFactoryBean.java:88)
            at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanR
    gistrySupport.java:168)
            ... 27 more
    Caused by: java.net.BindException: Failed to create server socket on  localhost/127.0.0.1[10,334]
            at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:829)
            at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:789)
            at com.gemstone.org.jgroups.stack.tcpserver.TcpServer.startServerThread(TcpServer.java:179)
            at com.gemstone.org.jgroups.stack.tcpserver.TcpServer.start(TcpServer.java:168)
            at com.gemstone.gemfire.distributed.internal.InternalLocator.startTcpServer(InternalLocator.java:629)
            at com.gemstone.gemfire.distributed.internal.InternalLocator.startPeerLocation(InternalLocator.java:698)
            at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.startInitLocator(InternalDistributedSyst
    m.java:832)
            ... 37 more
    Caused by: java.net.BindException: Address already in use: JVM_Bind
            at java.net.DualStackPlainSocketImpl.bind0(Native Method)
            at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
            at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
            at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
            at java.net.ServerSocket.bind(ServerSocket.java:375)
            at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:826)
            ... 43 more
    :bootRun FAILED

    FAILURE: Build failed with an exception.

    * What went wrong:
    Execution failed for task ':bootRun'.
    > Process 'command 'C:\Program Files\Java\jdk1.8.0_101\bin\java.exe'' finished with non-zero exit value 1

    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    Total time: 14.9 secs

Затем я использовал gfsh, чтобы остановить локатор.

Я попытался запустить ваш пример напрямую (без предварительного запуска локатора).

Невероятно, но это удалось.

Похоже, что ваш пример - запустить новый локатор Gemfire и сервер, а не подключаться к существующему локатору.


    [info 2017/07/09 15:19:16.930 CST  tid=0x1] Defaulting license-working-dir to current working directory "C:\Users\
    IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example".

    [info 2017/07/09 15:19:16.935 CST  tid=0x1] Licensing required 7 milliseconds.

    [info 2017/07/09 15:19:17.000 CST  tid=0x1] Starting peer location for Distribution Locator on localhost/127.0.0.1
    [10334]

    [info 2017/07/09 15:19:17.016 CST  tid=0x1] Starting Distribution Locator on localhost/127.0.0.1[10334]

    [info 2017/07/09 15:19:18.376 CST  tid=0x1] GemFire P2P Listener started on  tcp:///192.168.1.106:45643

    [info 2017/07/09 15:19:18.624 CST  tid=0x22] locator localhost(null):10334 member address is ADMINIB-CI3
    Q48M(SpringBootGemFireServer):37651

    [info 2017/07/09 15:19:25.674 CST  tid=0x25] locator localhost(null):10334 member address is ADMINIB-CI3
    Q48M(SpringBootGemFireServer):37651

    [info 2017/07/09 15:19:30.686 CST  tid=0x1] Membership: lead member is now ADMINIB-CI3Q48M(SpringBootGemFireServer
    ):37651

    [info 2017/07/09 15:19:30.701 CST  tid=0x1] This member, ADMINIB-CI3Q48M(SpringBootGemFireServer):37651, is becomi
    ng group coordinator.

    [info 2017/07/09 15:19:30.710 CST  tid=0x1] Entered into membership with ID ADMINIB-CI3Q48M(SpringBootGemFireServe
    r):37651.

    [info 2017/07/09 15:19:30.712 CST  tid=0x1] Starting DistributionManager ADMINIB-CI3Q48M(SpringBootGemFireServer):37651.  (took 12629/ ms)

    [info 2017/07/09 15:19:30.715 CST  tid=0x1] Initial (membershipManager) view =  [ADMINIB-CI3Q48M(SpringBootGemFire
    Server):37651{lead}]

    [info 2017/07/09 15:19:30.715 CST  tid=0x1] Admitting member :37651>.
     Now there are 1 non-admin member(s).

    [info 2017/07/09 15:19:30.716 CST  tid=0x1] ADMINIB-CI3Q48M(SpringBootGemFireServer):37651 is the elder and th
    e only member.

    [info 2017/07/09 15:19:31.081 CST  tid=0x1] Did not hear back from any other system. I am the first one.

    [info 2017/07/09 15:19:31.086 CST  tid=0x1] Starting server location for Distribution Locator on localhost/127.0.0
    .1[10334]

    [info 2017/07/09 15:19:31.358 CST  tid=0x1] Initializing region _monitoringRegion_192.168.1.10637651

    [info 2017/07/09 15:19:31.364 CST  tid=0x1] Initialization of region _monitoringRegion_192.168.1.10637651 comp
    leted

    [info 2017/07/09 15:19:32.857 CST  tid=0x1] Initializing region PdxTypes

    [info 2017/07/09 15:19:32.857 CST  tid=0x1] Initialization of region PdxTypes completed

    [main] INFO org.springframework.data.gemfire.CacheFactoryBean - Connected to Distributed System [SpringBootGemFireServer
    ] as Member [ADMINIB-CI3Q48M(SpringBootGemFireServer):37651]in Group(s) [[]] with Role(s) [[]] on Host [ADMINIB-CI3Q
    48M] having PID [0].
    [main] INFO org.springframework.data.gemfire.CacheFactoryBean - Created new GemFire v.8.2.0 Cache [SpringBootGemFireServ
    er].
    [info 2017/07/09 15:19:32.935 CST  tid=0x1] Initializing region __PR

    [info 2017/07/09 15:19:32.935 CST  tid=0x1] Initialization of region __PR completed

    [info 2017/07/09 15:19:32.986 CST  tid=0x1] Partitioned Region /Factorials is born with prId=1 ident:#Factorials

    [main] INFO org.springframework.data.gemfire.PartitionedRegionFactoryBean - Created new Cache Region [Factorials].
    [main] INFO org.springframework.jmx.export.annotation.AnnotationMBeanExporter - Registering beans for JMX exposure on st
    artup
    [main] INFO org.springframework.context.support.DefaultLifecycleProcessor - Starting beans in phase 2147483647
    [info 2017/07/09 15:19:33.379 CST  tid=0x1] Bridge server connection listener bound to address localhost/127.0.0.1
    :40404 with backlog 1,000.

    [info 2017/07/09 15:19:33.396 CST  tid=0x1] ClientHealthMonitorThread maximum allowed time between pings: 15,000

    [info 2017/07/09 15:19:33.425 CST  tid=0x1] CacheServer Configuration:   port=40404 max-connections=800 max-thread
    s=0 notify-by-subscription=true socket-buffer-size=32768 maximum-time-between-pings=15000 maximum-message-count=230000 m
    essage-time-to-live=180 eviction-policy=none capacity=1 overflow directory=. groups=[] loadProbe=ConnectionCountProbe lo
    adPollInterval=5000 tcpNoDelay=true

    [main] INFO org.example.SpringBootGemFireServer - Started SpringBootGemFireServer in 20.399 seconds (JVM running for 20.
    823)
    [info 2017/07/09 15:21:15.585 CST  tid=0x3e] (tid=62 msgId=0) Executing list member
    s

    [info 2017/07/09 15:22:26.546 CST  tid=0x3e] (tid=62 msgId=1) Executing describe me
    mber --name GemFireLocator

    > Building 80% > :bootRun

И я могу использовать gfsh для подключения к локатору, созданному вашим примером кода.


    gfsh>
    gfsh>stop locator --name GemFireLocator
    Stopping Locator running in C:\Users\IBM_ADMIN\GemFireLocator on ADMINIB-CI3Q48M[10334] as GemFireLocator...
    Process ID: 7256
    Log File: C:\Users\IBM_ADMIN\GemFireLocator\GemFireLocator.log
    ....

    No longer connected to ADMINIB-CI3Q48M[1099].
    gfsh>gfsh>list members
    "list members" is not available. Reason: Requires connection.
    gfsh>connect to loaclhost[10334]
    Connecting to Locator at [host=localhost, port=10334] ..
    Connecting to Manager at [host=ADMINIB-CI3Q48M, port=1199] ..
    Successfully connected to: [host=ADMINIB-CI3Q48M, port=1199]

    gfsh>list members
    Member Count : 1
    Coordinator  : SpringBootGemFireServer (ADMINIB-CI3Q48M(SpringBootGemFireServer):37651)

             Name           | Id
    ----------------------- | --------------------------------------------------
    SpringBootGemFireServer | ADMINIB-CI3Q48M(SpringBootGemFireServer):37651
    gfsh>describe member --name=SpringBootGemFireServer
    Name        : SpringBootGemFireServer
    Id          : ADMINIB-CI3Q48M(SpringBootGemFireServer):37651
    Host        : ADMINIB-CI3Q48M
    Regions     : Factorials

    PID         : 0
    Groups      :
    Used Heap   : 117M
    Max Heap    : 1755M
    Working Dir : C:\Users\IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example
    Log file    : C:\Users\IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example
    Locators    : localhost[10334]

    Cache Server Information
    Server Bind              : localhost
    Server Port              : 40404
    Running                  : true
    Client Connections       : 0

    gfsh>list regions
    List of regions
    ---------------
    Factorials

    gfsh>describe region --name=/Factorials
    ..........................................................
    Name            : Factorials
    Data Policy     : partition
    Hosting Members : SpringBootGemFireServer


    Non-Default Attributes Shared By Hosting Members

     Type  | Name | Value
    ------ | ---- | -----
    Region | size | 0

Не могли бы вы помочь проверить это?


person Shirley Sun    schedule 04.07.2017    source источник


Ответы (2)


Что ж, Stack Trace в этом случае довольно показательно.

По сути, контейнер Spring не смог создать экземпляр "однорангового узла" GemFire ​​cache (который основан на элементе <gfe:cache> в вашей XML-конфигурации Spring), потому что GemFire ​​не смог чтобы найти локатор, который вы запустили в Gfsh ...

Caused by: com.gemstone.gemfire.GemFireConfigException: Unable to contact a Locator service.  Operation either timed out or Locator does not exist.  Configured list of locators is "[localhost(null):40001]".
        at com.gemstone.org.jgroups.protocols.TCPGOSSIP.sendGetMembersRequest(TCPGOSSIP.java:222) ~[gemfire-8.2.4.jar:na]
        at com.gemstone.org.jgroups.protocols.PingSender.run(PingSender.java:85) ~[gemfire-8.2.4.jar:na]
        at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_111]

Следовательно...

c.g.g.GemFireConfigException: Невозможно связаться со службой локатора. Истекло время ожидания операции или локатор не существует.

Далее говорится, что ...

Настроенный список локаторов: «[localhost (null): 40001]».

Свойство locators в определении вашего gemfireProperties bean-компонента (которое определяет «Свойства GemFire») - это то, что ожидающий одноранговый узел GemFire, желающий присоединиться к кластеру, использует для поиска локатора GemFire ​​(и, соответственно, кластера, к которому нужно присоединиться). Действительно, одна или несколько конечных точек Locator (например, host1[port1],host2[port2],...,hostN[portN]) определяют кластер, к которому присоединится ожидающий одноранговый член.

Вне вашего искаженного XML для определения bean-объекта gemfireProperties в конфигурации XML Spring значение свойства locators кажется правильным. У вас есть «Локатор», работающий локально, прослушивающий порт 40001, по крайней мере, согласно вашим утверждениям. Однако это НЕ очевидно из команды list members.

So...

  1. Кулак, я полагаю, "test1" ваш локатор?

  2. И вы запустили свой локатор, используя ... gfsh> start locator --name=tests1 --port=40001 ... (я также предлагаю повысить уровень журнала с помощью --log-level=config)

  3. Наконец, я предполагаю, что «server1» действительно является «сервером GemFire»?

Если, например, "'test1" is indeed your Locator, then you can get the runtime information for the Locator usingstatus locator` ...

gfsh>status locator --name=test1
Locator in /Users/jblum/pivdev/lab/test1 on 10.99.199.10[40001] as test1 is currently online.
Process ID: 89632
Uptime: 1 minute 15 seconds
GemFire Version: 9.0.4
Java Version: 1.8.0_121
Log File: /Users/jblum/pivdev/lab/test1/test1.log
JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.log-level=config -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /Users/jblum/Downloads/Pivotal/GemStone/Products/PivotalGemFire/pivotal-gemfire-9.0.4/lib/geode-core-9.0.4.jar:/Users/jblum/Downloads/Pivotal/GemStone/Products/PivotalGemFire/pivotal-gemfire-9.0.4/lib/geode-dependencies.jar

Cluster configuration service is up and running.

Теперь у меня есть проект с документацией / инструкциями, который вы можете использовать для подключения GemFire ​​CacheServer, приложения однорангового кеширования, настроенного с помощью Spring (Data GemFire) и загруженного с помощью Spring Boot , доступный здесь.

Мой локатор "tests1" уже запущен, как показано выше с помощью команды status locator --name=test1 Gfsh. Если я перечислю участников перед запуском моего приложения Spring Boot GemFire ​​peer cache, CacheServer, вы увидите это ...

gfsh>list members
Name  | Id
----- | ----------------------------------------------
test1 | 10.99.199.10(test1:89632:locator)<ec><v0>:1024

Затем, когда я запускаю свой встроенный сервер, вы видите это ...

gfsh>list members
         Name           | Id
----------------------- | --------------------------------------------------------
test1                   | 10.99.199.10(test1:89632:locator)<ec><v0>:1024
SpringBootGemFireServer | 10.99.199.10(SpringBootGemFireServer:89790)<ec><v1>:1025

ПРИМЕЧАНИЕ. Я запустил сервер из своей среды IDE (IntelliJ IDEA). Конечно, это будет работать и из командной строки.

ПРИМЕЧАНИЕ. Поскольку локатор НЕ работает на порту по умолчанию (например, 10334), он работает на 40001, вам необходимо установить пользовательское свойство системы spring.gemfire.locators JVM приложения перед запущенный сервер, на "localhost [40001]". Это свойство переводится в свойство GemFire ​​locators здесь и здесь.

Поскольку list members показывает оба процесса GemFire ​​(Локатор + Сервер), вы знаете, что Сервер присоединился к кластеру на основе Локатора.

Опять же, не стесняйтесь ссылаться на мой пример.

Надеюсь это поможет!

-Джон

person John Blum    schedule 04.07.2017
comment
Большое спасибо, Джон. Но, честно говоря, мне твой пример сложен. Я думаю, что configuration.in xml мне проще. И я не понимаю, почему контейнер Spring не смог создать экземпляр однорангового кеша GemFire ​​(который основан на элементе ‹gfe: cache› в моей конфигурации Spring XML)? Я ссылаюсь на пример! здесь , Но я не могу его запустить. - person Shirley Sun; 09.07.2017
comment
Привет Джон. Я пробовал ваш пример, но все равно обнаружил ошибку. Я изложу детали в вопросе, пожалуйста, помогите проверить это, большое спасибо. - person Shirley Sun; 09.07.2017

Хорошо, во-первых, когда вы запустили GemFire ​​Locator (т.е. "GemFireLocator" с использованием Gfsh), вы использовали следующую команду Gfsh ...

gfsh> начальный указатель --name = GemFireLocator --log-level = config

Это привело к запуску локатора на порту по умолчанию, 10334, который не является портом, который вы указали ранее, 40001, но это нормально; таким образом проще запустить образец.

Это также видно из команды describe member ...

gfsh> описать член --name = GemFireLocator

В результате ...

Name        : GemFireLocator
Id          : 192.168.1.106(GemFireLocator:7256:locator):1024
Host        : ADMINIB-CI3Q48M
Regions     :
PID         : 7256
Groups      :
Used Heap   : 90M
Max Heap    : 1755M
Working Dir : C:\Users\IBM_ADMIN\GemFireLocator
Log file    : C:\Users\IBM_ADMIN\GemFireLocator\GemFireLocator.log
Locators    : 192.168.1.106[10334]

Последняя строчка ...

Locators    : 192.168.1.106[10334]

... показывает, что локатор прослушивает порт 10334, связанный с адресом 192.168.1.106.

Затем вы продолжаете запускать сервер GemFire ​​, используя мой образец. Я подозреваю, что вы не только запустили $ gradlew bootRun из командной строки, но и полностью выполнили инструкции, включая "Запуск со встроенным локатором GemFire ​​/ Geode" ... да?

На самом деле это очевидно из размещенного вами нового Stack Trace ...

...
...
Caused by: java.net.BindException: Failed to create server socket on  localhost/127.0.0.1[10,334]
        at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:829)
        at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:789)
        at com.gemstone.org.jgroups.stack.tcpserver.TcpServer.startServerThread(TcpServer.java:179)
        at com.gemstone.org.jgroups.stack.tcpserver.TcpServer.start(TcpServer.java:168)
        at com.gemstone.gemfire.distributed.internal.InternalLocator.startTcpServer(InternalLocator.java:629)
        at com.gemstone.gemfire.distributed.internal.InternalLocator.startPeerLocation(InternalLocator.java:698)
        at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.startInitLocator(InternalDistributedSyst
m.java:832)
        ... 37 more
Caused by: java.net.BindException: Address already in use: JVM_Bind
        at java.net.DualStackPlainSocketImpl.bind0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
        at java.net.ServerSocket.bind(ServerSocket.java:375)
        at com.gemstone.gemfire.internal.SocketCreator.createServerSocket(SocketCreator.java:826)
        ... 43 more

Следовательно...

Caused by: java.net.BindException: Failed to create server socket on  localhost/127.0.0.1[10,334]

А также...

Caused by: java.net.BindException: Address already in use: JVM_Bind

Не путайте «создание серверного сокета» с запуском сервера GemFire. В Java (как вы, возможно, уже знаете) всякий раз, когда вы привязываете адрес / порт для "клиентского" приложения для подключения, вы используете java.net.ServerSocket.

В этом случае локатор является «сервером» и создает java.net.ServerSocket для любых клиентов (например, Gfsh или других одноранговых членов, таких как серверы GemFire ​​(кэш)), которые хотят подключиться к «кластеру» GemFire. определяется Локатором.

И, как вы можете видеть, когда вы остановили первый локатор («GemFireLocator»), вы сначала запустили его в Gfsh, а затем запустили образец отдельно (и он запустился успешно!), Когда вы «описали» член, использующий ...

gfsh> описать член --name = SpringBootGemFireServer

     Name           | Id
----------------------- | --------------------------------------------------
SpringBootGemFireServer | ADMINIB-CI3Q48M(SpringBootGemFireServer):37651
gfsh>describe member --name=SpringBootGemFireServer
Name        : SpringBootGemFireServer
Id          : ADMINIB-CI3Q48M(SpringBootGemFireServer):37651
Host        : ADMINIB-CI3Q48M
Regions     : Factorials

PID         : 0
Groups      :
Used Heap   : 117M
Max Heap    : 1755M
Working Dir : C:\Users\IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example
Log file    : C:\Users\IBM_ADMIN\Documents\Workspace - Shirley\Workspace_SpringBoot\spring-boot-gemfire-server-example
Locators    : localhost[10334]

Cache Server Information
Server Bind              : localhost
Server Port              : 40404
Running                  : true
Client Connections       : 0

Вы можете увидеть несколько фрагментов интересной информации из команды describe member.

  1. Во-первых, и самое главное, видите ли ...

    Locators    : localhost[10334]
    

Это «встроенный» локатор. Он прослушивает порт 10334, поэтому вы столкнулись с j.n.BindException при первом запуске «GemFireLocator».

Это означает, что свойство приложения spring.gemfire.start-locator было установлено, и по умолчанию, я вижу, что это. Это, в свою очередь, устанавливает свойство GemFire ​​, start-locator (из свойства приложения), что затем заставляет GemFire ​​запускать« встроенный »локатор.

В результате это вызывает конфликт портов, когда «GemFireLocator» работает, так как вы запустили «GemFireLocator» на порту по умолчанию, 10334.

Если бы вы запустили «GemFireLocator» или «встроенный» локатор на другом порту, у вас бы не было этой проблемы.

Вы можете запустить локатор на другом порту, используя Gfsh с ...

gfsh> начальный локатор --name = GemFireLocator --port = 11235 --log-level = config

Однако, если вы затем захотите подключить SpringBootGemFireServer к «существующему» локатору (то есть «GemFireLocator», запущенному в Gfsh), вы должны изменить spring.gemfire.locators свойство приложения для соответствия (например, localhost[11235] ). Это, в свою очередь, записано здесь и установлено здесь.

В качестве альтернативы вы могли изменить значение для spring.gemfire.start-locator свойство приложения, скажем ... localhost[12480], или просто закомментируйте его. Это также позволило бы избежать j.n.BindException, поскольку внешний локатор («GemFireLocator») и «встроенный» локатор не будут конфликтовать на порте.

Технически, в моем примере spring.gemfire.start-locator должен был быть закомментирован по умолчанию. Мои извенения.

  1. Другие интересные факты о "SpringBootGemFireServer" ... у вас есть CacheSever, доступный для подключения к приложениям клиентов кеширования (т.е. ClientCache), следовательно ...

    Cache Server Information
    Server Bind              : localhost
    Server Port              : 40404
    Running                  : true
    Client Connections       : 0
    

Это происходит из здесь.

  1. И, конечно же, вы видите регион "Факториалы" ...

    Regions     : Factorials
    

Итак, что касается (что, вероятно, уже очевидно) ...

Невероятно, но это удалось.

Похоже, что ваш пример - запустить новый локатор Gemfire и сервер, а не подключиться к существующему локатору.

SpringBootGemFireServer удалось запустить, потому что вы 1) остановили свой "GemFireLocator" и 2) SpringBootGemFireServer запускал "встроенный" локатор, что видно из this.

Если на SpringBootGemFireServer не был запущен «встроенный» локатор (служба), то вы не смогли бы подключиться (после остановки «GemFireLocator»), но вы делал...

gfsh>stop locator --name GemFireLocator
Stopping Locator running in C:\Users\IBM_ADMIN\GemFireLocator on ADMINIB-CI3Q48M[10334] as GemFireLocator...
Process ID: 7256
Log File: C:\Users\IBM_ADMIN\GemFireLocator\GemFireLocator.log
....

No longer connected to ADMINIB-CI3Q48M[1099].

gfsh>gfsh>list members
"list members" is not available. Reason: Requires connection.

gfsh>connect
Connecting to Locator at [host=localhost, port=10334] ..
Connecting to Manager at [host=ADMINIB-CI3Q48M, port=1199] ..
Successfully connected to: [host=ADMINIB-CI3Q48M, port=1199]

«SpringBootGemFireServer» также является «менеджером», и именно поэтому вы можете подключиться в Gfsh.

Когда вы используете Gfsh connect без параметров, по умолчанию connect пытается найти локатор на "localhost", прослушивающий порт 10334, поэтому это ...

Connecting to Locator at [host=localhost, port=10334]

Однако ответственность Локатора заключается в том, чтобы найти существующего Менеджера в кластере и сообщить клиенту (т. Е. Gfsh), где его найти (т. Е. IP-адрес / порт). Вот почему вы видите последующее подключение ...

Connecting to Manager at [host=ADMINIB-CI3Q48M, port=1199] ..

Все это стало возможным благодаря это. Если в кластере еще нет существующего «Менеджера», тогда Локатор запрограммирован / настроен, чтобы стать «Менеджером». _ 31_ Свойство GemFire ​​ позволяет любому члену кластера« стать »менеджером. Однако это не означает, что по умолчанию он будет запускаться как менеджер. Чтобы заставить участника быть менеджером при запуске, вы также должны установить _ 32_ свойство GemFire ​​, как я сделал с SpringBootGemFireServer (конечно, я по умолчанию использую значение false по умолчанию, поэтому он не запускается как менеджер при запуске). В любом случае...

Если вы хотите подключиться к внешнему "существующему" локатору (например, "GemFireLocator"), запущенному с Gfsh, тогда ...

  1. Запустить...

gfsh> начальный локатор --name = GemFireLocator --log-level = config.

ПРИМЕЧАНИЕ: имейте в виду, что GemFireLocator будет прослушивать порт по умолчанию (10334), если вы не укажете параметр --port для команды start locator.

  1. Убедитесь, что вы закомментировали строка 8 в application.properties файле, полученном приложением" SpringBootGemFireServer ". Кроме того, вы можете изменить порт встроенных локаторов, установив для свойства приложения spring.gemfire.start-locator значение, скажем ... localhost[11235].

  2. (необязательно) Если вы устанавливаете порт для своего «внешнего» / «существующего» локатора (например, «GemFireLocator» запускается из Gfsh), обязательно установите _ 37_ свойство приложения для соответствия.

Надеюсь это поможет!

С уважением, Джон

person John Blum    schedule 12.07.2017