Spring微服务无法注册到指定的Spring cloud Eureka

        我们前期方便部门内应用间的依赖调用构建了一个公共项目,大家将自己的应用以模块的方式创建。后来由于新的项目越来越多,导致代码合并经常冲突。再加上近期决定要将应用进行容器化部署。同时为了各应用间开发间避免彼此影响提出了两种解决方案。

        方案一:应用可以剥离成独立的项目

        方案二:根据应用建立专属分支,每个组只对自己的独立分支进行拉取和维护

        因为项目中有一个基础模块封装了一些启动项,比如配置类的启动项,eureka的启动注解等这样每个模块就不需要单独配置。大家遵守同一套逻辑方便管理和敏捷开发。

        因为我们的项目使用了独立分支,导致一些项目在docker构建时打包过程报错,因为docker_file文件也是公用的,打包过程会将其他模块项目一同打包,由于其他项目不同步导致构建失败。而在将其他模块删除后只保留基础模块和自身应用模块后进行容器化部署成功。但是在接口调用时出现失败,失败原因找不到服务网管熔断。

问题初步怀疑应用没起来

验证步骤:

        1.于是进入容器使用jps命令发现应用正常(证明应用存活)

        2.使用xxl-job调用任务,任务执行正常(证明服务正常)

结论:

        应用启动服务正常

问题Apollo配置文件可能错误:

        application,eureka 可能配置错误导致没有注册到正确的eureka上

验证步骤:

        1.进入pod 找到apollo相关配置文件确认文件内容 (Apollo配置文件正确)

结论:

        Apollo配置文件无问题

联合定位多环境对比

相同代码和配置我什么在pod中部署和在服务器部署效果不同?于是联系运维同学协助定位,将pod容器中的jar包导出在eureka server的那台机器上部署发现运行正常可以注册到eureka上。但是部署到另外一台机器上和在pod部署效果一样?

到此大致猜测出原因可能是eureka启动注解和Apollo注解以及springboot启动注解导致,eureka client初始化话时并未从配置参数获取到eureka server注册地址,导致eureka client使用了localhost:8761/eureka作为注册地址,而在Apollo加载eureka配置文件时,eureka client已经完成初始化对象中的地址:http://localhost:8761/eureka 而非我们配置文件中指定eureka server的注册地址

验证:

        通过@Value(“eureka.client.serviceUrl.defaultZone”)注解将配置参数在程序中输出

发现是自己设置的eureka server地址而非默认的地址

解决方案:

        调整apollo扫描注解位置,将eureka注解放到springboot启动类注解之后

部署验证:

        应用成功注册到指定的eureka上

遗留问题:

        生产上的代码我什么可以正常初始化和注册到指定的eureka server上

推测:

        问题可能是发生在docker 构建导致打包的文件顺序出现了调整导致Apollo加载的文件顺序在eureka client启动后才完成

调整启动注解顺序后的启动类:

@EnableApolloConfig({"application", "YW01_EUREKA"})
@EnableAsync
@EnableStoJob
@EnableRetry
@Slf4j
@SpringBootApplication
@EnableEurekaClient

public class XXXXXXApplication extends BaseApplication {


    public static void main(String[] args) {
        SpringApplication.run(DevopsCloudmanagementApplication.class, args);
    }

    /**
     * 提交代码禁止放开 @Primary
     * @return
     */
    @Profile("local")
    @Bean
//    @Primary
    public RestTemplate notEurekaRestTemplate() {
        return new RestTemplate();
    }

}

你可能感兴趣的:(spring,cloud,eureka,spring)