【问题标题】:Hazelcast spring boot app not working as ec2 serviceHazelcast spring boot 应用程序不能作为 ec2 服务运行
【发布时间】:2021-09-24 06:43:41
【问题描述】:

我使用this guide 中的代码创建了 Spring Boot 应用程序。 hazelcast.yaml 如下。

hazelcast:
  network:
    join:
      multicast:
        enabled: false
      aws:
        enabled: true
        host-header: ec2
    interfaces:
      enabled: true
      interfaces:
        - 10.9.*.*
  map:
    books:
      time-to-live-seconds: 60

但我得到错误

2021-07-15 10:14:08.101 INFO 1 --- [main] c.h.i.config.AbstractConfigLocator:从类路径加载“hazelcast.yaml”。 2021-07-15 10:14:08.911 INFO 1 --- [main] com.hazelcast.instance.AddressPicker:[LOCAL] [dev] [4.2.1] 接口已启用,试图选择一个与其中之一匹配的地址:[10.9..] 2021-07-15 10:14:09.098 INFO 1 --- [main] com.hazelcast.system : [10.9.0.4]:5701 [dev] [4.2.1] Hazelcast 4.2.1 (20210630 - 06a4018) 从[10.9.0.4]:5701 2021-07-15 10:14:11.700 INFO 1 --- [main] com.hazelcast.aws.AwsDiscoveryStrategy:使用 AWS 发现插件和配置:AwsConfig{accessKey='', secretKey='',iamRole='null',region='null',hostHeader='ec2',securityGroupName='null',tagKey='null',tagValue='null',hzPort=5701-5708 , cluster='null', family='null', serviceName='null', connectionTimeoutSeconds=10, connectionRetries=3, readTimeoutSeconds=10} 2021-07-15 10:14:11.717 错误 1 ​​--- [main] com.hazelcast.instance.impl.Node: [10.9.0.4]:5701 [dev] [4.2.1] 节点创建失败 java.lang.RuntimeException:未能配置发现策略 在 com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.loadDiscoveryStrategies(DefaultDiscoveryService.java:161) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.(DefaultDiscoveryService.java:58) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.spi.discovery.impl.DefaultDiscoveryServiceProvider.newDiscoveryService(DefaultDiscoveryServiceProvider.java:29) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.Node.createDiscoveryService(Node.java:343) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.Node.(Node.java:269) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.HazelcastInstanceImpl.createNode(HazelcastInstanceImpl.java:148) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.HazelcastInstanceImpl.(HazelcastInstanceImpl.java:117) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.HazelcastInstanceFactory.constructHazelcastInstance(HazelcastInstanceFactory.java:211) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:190) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.instance.impl.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:128) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:91) [hazelcast-all-4.2.1.jar!/:4.2.1] 在 org.springframework.boot.autoconfigure.hazelcast.HazelcastServerConfiguration$HazelcastServerConfigFileConfiguration.hazelcastInstance(HazelcastServerConfiguration.java:55) [spring-boot-autoconfigure-2.4.2.jar!/:2.4.2] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_212] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_212] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212] 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.3.jar!/:5.3.3] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.3.jar!/:5.3.3] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.3.jar!/:5.3.3] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.2.jar!/:2.4.2] 在 com.example.hazelcast.HazelcastApplication.main(HazelcastApplication.java:12) ~[classes!/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_212] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_212] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212] 在 org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[app.jar:na] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:107) ~[app.jar:na] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[app.jar:na] 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[app.jar:na] 引起:java.lang.NullPointerException:null 在 java.util.regex.Matcher.getTextLength(Matcher.java:1283) ~[na:1.8.0_212] 在 java.util.regex.Matcher.reset(Matcher.java:309) ~[na:1.8.0_212] 在 java.util.regex.Matcher.(Matcher.java:229) ~[na:1.8.0_212] 在 java.util.regex.Pattern.matcher(Pattern.java:1093) ~[na:1.8.0_212] 在 com.hazelcast.aws.RegionValidator.validateRegion(RegionValidator.java:33) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.aws.AwsClientConfigurator.createAwsClient(AwsClientConfigurator.java:53) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.aws.AwsDiscoveryStrategy.(AwsDiscoveryStrategy.java:79) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.aws.AwsDiscoveryStrategyFactory.newDiscoveryStrategy(AwsDiscoveryStrategyFactory.java:50) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.buildDiscoveryStrategy(DefaultDiscoveryService.java:195) ~[hazelcast-all-4.2.1.jar!/:4.2.1] 在 com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.loadDiscoveryStrategies(DefaultDiscoveryService.java:141) ~[hazelcast-all-4.2.1.jar!/:4.2.1] ...省略了45个常用框架 2021-07-15 10:14:11.718 INFO 1 --- [main] com.hazelcast.instance.impl.Node: [10.9.0.4]:5701 [dev] [4.2.1] 关闭连接管理器... 2021-07-15 10:14:11.792 INFO 1 --- [main] com.hazelcast.instance.impl.Node: [10.9.0.4]:5701 [dev] [4.2.1] 关闭节点引擎... 2021-07-15 10:14:11.804 INFO 1 --- [main] c.hazelcast.instance.impl.NodeExtension:[10.9.0.4]:5701 [dev] [4.2.1] 销毁节点 NodeExtension。

但是,当我尝试仅删除 host-header: ec2 的 Fargate 服务时,它起作用了。如何作为 ec2 服务运行?

【问题讨论】:

    标签: spring-boot amazon-ec2 amazon-ecs hazelcast


    【解决方案1】:

    该配置适用于 EC2 上的 ECS。

    如果您使用的是 EC2 实例,请按如下方式进行配置

    <hazelcast>
        <network>
             <join>
                 <multicast enabled="false"/>
                 <aws enabled="true">
                     <tag-key>my-ec2-instance-tag-key</tag-key>
                     <tag-value>my-ec2-instance-tag-value</tag-value>
                 </aws>
            </join>
        </network>
    </hazelcast>
    

    参考以下链接 https://guides.hazelcast.org/ecs-embedded/

    【讨论】:

    • 无法处理相同的错误。日志的唯一区别是IP的变化
    【解决方案2】:

    似乎由于某种原因该区域未从您的 EC2 实例解析。也许您禁用了元数据 API。我建议手动配置区域。

    hazelcast:
      network:
        join:
          multicast:
            enabled: false
          aws:
            enabled: true
            region: <your-region>
            host-header: ec2
    ...
    

    【讨论】:

    • 更改后我收到此错误。 com.hazelcast.aws.RestClientException: Failure in executing REST call。你对此有什么想法吗?
    • 那么,我建议您检查一下为什么您的 EC2 确实可以访问 AWS EC2 元数据端点。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多