springCloud(四)注册中心与配置中心nacos

93 阅读1分钟

启动nacos

image.png

配置中心

读取本地的配置文件

member模块

配置文件

//application.properties

test.nacos=Member

controller

@RestController
public class TestController {
    private static final Logger LOG = LoggerFactory.getLogger(TestController.class);

    @Value("${test.nacos}")
    private String testNacos;

    @GetMapping("/login")
    public String login() {
        return testNacos;
    }
}

演示效果

image.png

读取nacos配置文件

nacos配置

image.png

父模块

依赖

//pom.xml

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0-RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

member模块

依赖

    <dependencies>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--SpringBoot 2.4版本之后 SpringCloud 2020,需要引入该依赖,才能读取bootstrap文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>

springcloud配置

  • bootstrap.properties: 用于springcloud
  • application.properties: 用于springboot
// bootstrap.properties

# 注册中心的名字  
spring.application.name=member  
  
## 启动环境,nacos会根据环境读不同的配置dataId:member-dev.properties  
spring.profiles.active=dev  
  
## nacos server地址  
spring.cloud.nacos.config.server-addr=127.0.0.1:8848  
## 配置中心文件后缀,默认properties  
spring.cloud.nacos.config.file-extension=properties  
  
spring.cloud.nacos.config.namespace=springCloud3

controller

@RefreshScope: 用于实时刷新,在nacos编辑后,不用重启项目,就能看到更新

@RestController
@RefreshScope
public class TestController {
    private static final Logger LOG = LoggerFactory.getLogger(TestController.class);

    @Value("${test.nacos2}")
    private String testNacos2;

    @GetMapping("/login")
    public String login() {
        return testNacos2;
    }
}

演示效果

image.png

总结

  • nacos的配置等同于application.properties定义的配置
  • nacos与application.properties存在同名的配置,nacos优化级更高
  • nacos支持实时更改刷新

多环境配置

nacos

image.png

项目

配置

application-prod.properties

server.port= 18002  
server.servlet.context-path=/member  
  
spring.application.name=member  
  
test.nacos=Member

项目启动配置

image.png

演示效果

image.png

image.png

注册中心

common模块

引入依赖

pom.xml

<!-- 注册中心 -->  
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  
</dependency>

member模块

bootstrap.properties

增加下面代码

## nacos server注册中心地址  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848  
spring.cloud.nacos.discovery.namespace=springCloud3

演示效果

image.png

image.png

gateway+nacos实现按路由名转发

gateway

pom.xml

        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--SpringBoot 2.4版本之后 SpringCloud 2020,需要引入该依赖,才能读取bootstrap文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

application.properties

server.port=8000  
  
spring.cloud.gateway.routes[0].id=member  
#spring.cloud.gateway.routes[0].uri=http://127.0.0.1:8002  //修改前
spring.cloud.gateway.routes[0].uri=lb://member  //修改后
spring.cloud.gateway.routes[0].predicates[0]=Path=/member/**  
  
spring.cloud.gateway.routes[1].id=business  
spring.cloud.gateway.routes[1].uri=lb://business  
spring.cloud.gateway.routes[1].predicates[0]=Path=/business/**

feign+nacos实现按应用名做远程调用

@FeignClient("business") //修改后
//@FeignClient(name = "business", url = "http://127.0.0.1:8003/business")  //修改前
public interface BusinessFeign {
    @GetMapping("/business/hello")
    String hello();
}

负载均衡

gateway

pom.xml

增加依赖

<!--客户端负载均衡loadbalancer-->  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>  
</dependency>

member

controller

@RestController
@RefreshScope
public class TestController {
    private static final Logger LOG = LoggerFactory.getLogger(TestController.class);

    @Value("${test.nacos}")
    private String testNacos;

    @Autowired
    Environment environment;


    @Resource
    BusinessFeign businessFeign;
 
    @GetMapping("/hello2")
    public String hello2() {
        String port = environment.getProperty("local.server.port");
        return String.format("Hello %s! 端口:%s", testNacos, port);
    }
}

项目启动配置

image.png

nacos

image.png

image.png

演示效果

  • 访问http://127.0.0.1:8000/member/hello2会按权重随机访问 启动的项目
  • 访问http://127.0.0.1:8002/member/hello2会访问当前指定的启动项目

下图,因为下线了18001,并且8002与18002的权重相等,所以平均访问8002与18002

1.gif