Spring-Data-Gemfire - Unable to contact a Locator service. Operation either timed out or Locator does not exist

本秂侑毒 提交于 2020-01-24 21:34:26

问题


I want to connect to a exist locator.
Now I don't have client-server.

I started a locator,port is 40001, server1 port is 40411.


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

Configuration is:


    <?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>


Error is :


    [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]

Oh my god, I have no idea for this problem.
Anyone who can help me ?
I just want to build a client-server system.
But now I even couldn't to set-up the server.


Update on July.09 - 2017

Hello John, I tried your example, but I still met error.

First, I use gfsh to start a locator.


    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]

And then as you mentioned in the spring-boot-gemfire-server-example, I tried to run $gradlew bootRun.

But the error shows: Caused by: java.net.BindException: Address already in use: 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

And then, I used gfsh to stopped the locator.

I tried to run your example directly ( without start a locator first ).

Unbelievable, it succeed.

It seems like that your example is to start a new Gemfire locator and a server, not connect to a exist locator.


    [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

And I can use gfsh to connect to the locator what your example code created.


    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

Could you plese help to check it ?


回答1:


Well, the Stack Trace is pretty revealing in this case.

Essentially, the Spring container was unable to create an instance of a GemFire "peer" cache (which is based on the <gfe:cache> element in your Spring XML config) because GemFire was unable to find the Locator you started from 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]

Hence...

c.g.g.GemFireConfigException: Unable to contact a Locator service. Operation either timed out or Locator does not exist.

It goes on to state that...

Configured list of locators is "[localhost(null):40001]".

The locators property in your gemfireProperties bean definition (which defines the "GemFire properties") is what a pending GemFire peer looking to join a cluster uses to find the GemFire Locator (and by extension, the cluster to join). Indeed, 1 or more Locator endpoints (e.g. host1[port1],host2[port2],...,hostN[portN]) defines the cluster to which the pending peer member will join.

Outside of your malformed XML for the gemfireProperties bean definition in your Spring XML config, the value of the locators property appears to be correct. You have a "Locator" running locally, listening on port 40001, at least according to your statements. That is NOT apparent from the list members command, though.

So...

  1. Fist, I assume "test1" is your Locator?

  2. And, you started your Locator using... gfsh> start locator --name=tests1 --port=40001 ... (I also suggest turning up the log level with --log-level=config)

  3. Finally, I assume "server1" is indeed a "GemFire Server"?

If "'test1" is indeed your Locator, then you can get the runtime information for the Locator usingstatus locator`, for instance...

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.

Now, I have a project, complete with documentation/instructions, you can use to connect a GemFire CacheServer, peer cache application configured with Spring (Data GemFire) and bootstrapped with Spring Boot, available here.

My "tests1" Locator is already running, as shown above with the status locator --name=test1 Gfsh command. If I list members before starting my Spring Boot GemFire peer cache, CacheServer application, you see this...

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

Then, when I start my embedded server, you see this...

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

NOTE: I ran the server from inside my IDE (IntelliJ IDEA). Of course, it would work from the command-line too.

NOTE: Since the Locator is NOT running on the default port (i.e. 10334), it is running on 40001, you need to set the custom, application spring.gemfire.locators JVM System property before running the server, to "localhost[40001]". This property translates into GemFire's locators property here and here.

Because list members shows both GemFire processes (Locator + Server), you know that the Server has joined the cluster based on the Locator.

Again, feel free to refer to my example.

Hope this helps!

-John




回答2:


Ok, first, when you started the GemFire Locator (i.e. "GemFireLocator" using Gfsh), you used the following Gfsh command...

gfsh> start locator --name=GemFireLocator --log-level=config

This resulted in starting the Locator on the default port, 10334, which is not the port you stated previously, 40001, but that is fine; it is easier to run the sample this way.

This is also apparent from the describe member command...

gfsh>describe member --name=GemFireLocator

Which resulted in...

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]

The last line...

Locators    : 192.168.1.106[10334]

... reveals that the Locator is listening on port 10334 bound to address 192.168.1.106.

Then, you proceed in starting the GemFire Server using my sample. I suspect not only did you run $ gradlew bootRun from the command-line, but that you followed the instructions to conclusion, including "Running with an Embedded GemFire/Geode Locator"... yes?

It is actually apparent from the new Stack Trace you posted...

...
...
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

Hence...

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

And...

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

Do not confuse "creating a server socket" with starting a GemFire Server. In Java (as you may already know), whenever you bind an address/port for a "client" application to connect, you use a java.net.ServerSocket.

In this case, a Locator is a "server" and creates a java.net.ServerSocket for any clients (e.g. Gfsh, or other peer members like GemFire (Cache) Servers) that want to connect to the GemFire "cluster" defined by the Locator.

And, as you can see when you stopped the first Locator ("GemFireLocator") you started in Gfsh initially, and then ran the sample by itself (and it started successfully!), when you "described" the member, using...

gfsh> describe member --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

You can see several bits of interesting information from the describe member command.

  1. First, and most importantly, you see...

    Locators    : localhost[10334]
    

This is the "embedded" Locator. It is listening on port 10334, which is why you encountered the j.n.BindException when your "GemFireLocator" was running the first time.

This means the spring.gemfire.start-locator application property was set, and by default, I see that it is. This in turn sets the GemFire property, start-locator (from the application property), which then causes GemFire to start an "embedded" Locator.

As result, this causes a port conflict when "GemFireLocator" is running since you started the "GemFireLocator" on the default port, 10334.

If you had started the "GemFireLocator" or the "embedded" Locator on a different port, you would not have had this problem.

You can start a Locator on a different port using Gfsh with...

gfsh> start locator --name=GemFireLocator --port=11235 --log-level=config

However, if you then want to connect the "SpringBootGemFireServer" to the "existing" Locator (i.e. "GemFireLocator" started in Gfsh), then you must change the spring.gemfire.locators application property to match (e.g. localhost[11235]). This in turn is captured here and set here.

Alternatively, you could have changed the value for spring.gemfire.start-locator application property to, say... localhost[12480], or just simply comment it out. This would have also avoided the j.n.BindException since the external Locator ("GemFireLocator") and the "embedded" Locator would then not conflict on port.

Technically, the spring.gemfire.start-locator should have been commented out by default in my sample. My apologies.

  1. Other interesting tidbits about "SpringBootGemFireServer"... you have a CacheSever available for cache clients (i.e. ClientCache) applications to connect, hence...

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

This comes from here.

  1. And of course, you see the "Factorials" Region...

    Regions     : Factorials
    

So, regarding (which is probably apparent by now)...

Unbelievable, it succeed.

It seems like that your example is to start a new Gemfire locator and a server, not connect to a exist locator.

The SpringBootGemFireServer succeeded to start because you 1) stopped your "GemFireLocator" and 2) the SpringBootGemFireServer was running an "embedded" Locator, apparent from this.

If the SpringBootGemFireServer was not running the "embedded" Locator (service), then you would not have been able to connect (after you stopped your "GemFireLocator"), but you did...

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]

The "SpringBootGemFireServer" is also a "Manager", which is actually the reason you can connect in Gfsh.

When you use Gfsh's connect without an options, by default, connect tries to find a Locator on "localhost" listening on port 10334, hence this...

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

However, the Locator's responsibility is to find an existing Manager in the cluster and tell the client (i.e. Gfsh) where to find it (i.e. IP address/port). That is why you see the subsequent connect...

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

All of that was made possible by this. If there is not already an existing "Manager" in the cluster, then the Locator is programmed/configured to become the "Manager". The jmx-manager GemFire property enables any member in the cluster to "become" a Manager. However, that does not mean it will startup as a Manager by default. To force the member to be a Manager at start, you must also set the jmx-manager-start GemFire property, as I have done with the SpringBootGemFireServer (of course, I default the value to false by default so it won't start as a Manager on startup). Anyway...

If you want to connect to an external, "existing" Locator (e.g. "GemFireLocator") started with Gfsh, then...

  1. Run...

gfsh> start locator --name=GemFireLocator --log-level=config.

NOTE: keep in mind that GemFireLocator will be listening on the default port (10334) unless you specify the --port option to the start locator command.

  1. Make sure you comment out line 8 in the application.properties file picked up by the "SpringBootGemFireServer" application. Alternatively, you can change the embedded Locators port by setting the spring.gemfire.start-locator application property to, say... localhost[11235].

  2. (optional) If you set a port for your "external" / "existing" Locator (i.e. "GemFireLocator" started from Gfsh), then be sure to set the spring.gemfire.locators application property to match.

Hope this helps!

Regards, -John



来源:https://stackoverflow.com/questions/44910285/spring-data-gemfire-unable-to-contact-a-locator-service-operation-either-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!