Spring Cloud集成Nacos生产环境使用

Nacos 是阿里开源的 RCP 服务注册发现、配置中心等功能的一个框架。

使用Nacos可以作为spring cloud 服务注册中心和配置中心,如果在生成环境使用,需要搭建集群,实现高可用,并且通过域名实现负载均衡。 

集群架构图

Spring Cloud集成Nacos生产环境使用_第1张图片

官方参考文档: 集群部署

 

Nginx配置

upstream nacos {
  server 127.0.0.1:8848;
  server 127.0.0.1:8849;
  server 127.0.0.1:8850;
}

server {
  listen 80;
  server_name  nacos.com;
  location / {
    proxy_pass http://nacos;
  }
}

 

Spring Cloud 项目集成Nacos

有两种方式,一种是使用spring cloud 的 jar 包; 另一种方式是引入阿里的jar 包。推荐使用阿里的,因为比较新;spring cloud 集成的nacos 相关jar 包不是最新的,只能实现最简单的服务注册发现,自定义group不生效,不支持权限功能。如果想使用权限功能,需要使用阿里最新的包。

方法一:

maven依赖:


    
    
        
            org.springframework.cloud
            spring-cloud-alibaba-dependencies                    
            0.9.0.RELEASE
            pom
            import
        
       
    




    
    
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
    
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-config
    

方法二(推荐使用):


    org.springframework.boot
    spring-boot-starter-parent
    2.2.5.RELEASE



    
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.RELEASE
            pom
            import
        
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2.2.1.RELEASE
            pom
            import
        
        
            com.alibaba.nacos
            nacos-client
            1.3.0
        
    



    
            com.alibaba.nacos
            nacos-client
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            
                
                    com.alibaba.nacos
                    nacos-client
                
            
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
            
                
                    com.alibaba.nacos
                    nacos-client
                
            
        

如果使用权限,需要在nacos 服务端开启配置,该配置热生效。

nacos.core.auth.enabled=true
nacos.core.cacheing.enabled=true

项目配置:

1. bootstrap.properties

spring.application.name=demo-core
spring.profiles.active=dev

spring.cloud.nacos.config.server-addr=nacos.com:80
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos

2. application.yml

server:
  port: 9000

spring:
  cloud:
    nacos:
      discovery:
        server-addr: nacos.com:80
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
      config:
        group: DEFAULT_GROUP
        file-extension: properties

3. bootstrap-dev.properties

通过profiles机制,实现环境切换。可以使用自定义命名空间来区分环境,命名空间namespace配置的是ID,不是名称

#nacos 命名空间
spring.cloud.nacos.discovery.namespace=8b4cd4e4-c018-42a7-a8e2-e3c724e6d80b
spring.cloud.nacos.config.namespace=8b4cd4e4-c018-42a7-a8e2-e3c724e6d80b

启动类

@SpringCloudApplication
@EnableDiscoveryClient
@EnableFeignClients
@Slf4j
public class CoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CoreApplication.class, args);
        log.info("----------- CoreApplication Start Success ------------");
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

启动后,可以在Nacos控制台查看

服务列表

Spring Cloud集成Nacos生产环境使用_第2张图片

命名空间 

Spring Cloud集成Nacos生产环境使用_第3张图片

配置列表

配置文件data id 文件名规则:${prefix}-${spring.profile.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置

Spring Cloud集成Nacos生产环境使用_第4张图片

 

踩坑

1. server-addr= 域名+port,如果只配置server-addr=nacos.com,Nacos 代码生成的路径中,会在域名后加端口8848,访问路径不对。

2. Spring cloud 项目配置文件加载顺序,最先加载bootstrap.properties,项目中要有bootstrap.properties文件,并在bootstrap.properties中包含配置中心地址

3. 如果使用org.springframework.cloud的jar, 目前有个bug,服务注册时,group默认DEFAULT_GROUP,如果自定义group,注册后发现还是DEFAULT_GROUP,自定义的不生效。所以如果要使用group,用阿里提供的最新 版jar。

4. 使用Nacos作为配置中心时,有三种方式可以区分环境。

  • 使用Data IDprofiles实现

  • 使用Group实现

  • 使用Namespace实现(推荐使用)

在使用Namespace区分环境时,如果是spring boot项目,配置文件使用bootstrap.properties、bootstrap-dev.properties、bootstrap-test.properties  来命名,如果使用application作为文件名前缀,自定义命名空间会无效,默认使用public。

5. 版本冲突问题

引入actuator做健康检查时,如果spring boot 版本不兼容,会报以下错误:

Error creating bean with name 'servletEndpointRegistrar' defined in class path resource

Spring Cloud集成Nacos生产环境使用_第5张图片

使用spring-boot-2.2.0.RELEASE 就会有以上问题,升级到2.2.5.RELEASE 问题解决。

还有就是需要注意 spring boot 和 spring cloud 的版本要兼容,否则也会在启动时报错。

6. 如果要启用Nacos权限功能,需要使用最新的版本,否则会有不少问题,目前最新版1.3.0的权限功能还有一些小问题,期待后续的更新完善。

   参考issues: https://github.com/alibaba/nacos/issues/3080

                      https://github.com/alibaba/nacos/issues/3144

 

你可能感兴趣的:(RPC,Nacos,Java)