Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务

什么是Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

官方介绍:https://nacos.io/zh-cn/docs/what-is-nacos.html

下载、启动Nacos

下载地址:https://github.com/alibaba/nacos/releases

下载最新版本后解压,截止作者撰写此文章,naco最新版本为1.0.0-RC3
目录如下图所示:

Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务_第1张图片

单机模式启动

进入bin目录

Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

Windows

启动命令:

cmd startup.cmd

或者双击startup.cmd运行文件。

启动成功后如下图:


Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务_第2张图片

单机模式支持mysql

  1. 安装数据库,版本要求:5.6.5+
  2. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

集群或多集群模式

参考官方文档:https://nacos.io/zh-cn/docs/deployment.html

Web 控制台

打开浏览器,输入 http://localhost:8848/nacos/index.html
初始账号、密码都为:nacos

配置管理&服务提供方

1.新建一个Spring Cloud工程,在pom文件中添加以下依赖:

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

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.SR1
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.2.1.RELEASE
                pom
                import
            
        
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

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

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

        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2.在resource目录下新建bootstrap.properties文件并加入以下内容:

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=nacos-config
server.port=8000

spring.cloud.nacos.config.server-addr=127.0.0.1:8848配置nacos配置管理服务的地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848配置nacos服务注册的地址
spring.application.name=nacos-config配置应用名
server.port=8000配置应用端口

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

3.通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${user.key:123456}")
    private String userKey;

    @RequestMapping("/get")
    public String get() {
        return userKey;
    }
}
  1. 在nacos控制台新建如下配置:


    Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务_第3张图片
  2. 运行项目,调用curl http://localhost:8000/config/get,返回内容是 mykey

  3. 修改控制台配置内容user.key = mykey2,再次调用curl http://localhost:8000/config/get,返回内容是 mykey2

  4. 为应用加上@EnableDiscoveryClient注解来注册服务:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {

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

在控制台-服务列表 即可看到该服务已被注册:


Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务_第4张图片

服务消费方Rest+Feign

  1. 创建nacos-consumer工程,并在pom文件中添加以下依赖:
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.SR1
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.2.1.RELEASE
                pom
                import
            
        
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2.开启服务注册与Feign支持,并开启Ribbon

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {

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

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

}
  1. 创建FeignClient
@FeignClient(name = "nacos-config")
public interface ConfigFeignClient {
    @RequestMapping(value = "/config/get", method = RequestMethod.GET)
    String userKey();
}
  1. 创建Controller,消费nacos-config应用的服务:
@RestController
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;

    @Autowired
    ConfigFeignClient configFeignClient;

    @RequestMapping(value = "/rest/userKey", method = RequestMethod.GET)
    public String rest() {
        return restTemplate.getForObject("http://nacos-config/config/get", String.class);
    }

    @RequestMapping(value = "/feign/userKey", method = RequestMethod.GET)
    public String feign() {
        return configFeignClient.userKey();
    }
}
  1. 调用http://localhost:8001/feign/userKey或者http://localhost:8001/rest/userKey,可以看到返回mykey2

你可能感兴趣的:(Spring Cloud 微服务架构实战(二)——使用alibaba-nacos发现、配置和管理微服务)