Nacos作为微服务架构的注册发现中心和配置中心

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。

 

Nacos的作用是作为微服务架构中注册中心(替代:eurekba、consul等传统方案)和配置中心(spring could config)来使用。Nacos拥有简洁易用的ui界面。

简单来说 Nacos 就是注册中心 + 配置中心的组合,提供简单易用的特性集,帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。

为什么选择Nacos:

Eureka社区活跃性低(2.x版本闭源),它的社区活跃性高,中文文档,方便管理服务,支持控制台管理。

 

安装Nacos:

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

选择需要的版本下载完成后解压(我选择的是1.1.4),根据不同的平台,执行不同的命令启动bin文件夹下的startup.cmd或者startup.sh启动文件:

Linux/Unix/Mac:sh startup.sh -m standalone

Windows : 双击startuo.cmd启动 :)

启动完成之后,访问:http://127.0.0.1:8848/nacos/,(如果使用Nacos 0.8.0以上版本,会出现登录页面,默认用户名密码为:nacos)。可以进入Nacos的服务管理页面,具体如下:

Nacos作为微服务架构的注册发现中心和配置中心_第1张图片

在项目构建配置应用接入Nacos注册中心

创建动态配置管理服务application-config(启动类为NacosConfigApplication),1.添加依赖:


      org.springframework.cloud
      spring-cloud-starter-alibaba-nacos-config
      ${latest.version}

 

2.在bootstrap.properties中配置Nacos Server的地址和应用名:

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.application.name=application-config

说明:之所以需要配置spring.application.name,是因为它是构成 Nacos 配置管理的一部分

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

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    @Value("${useLocalCache:false}")
    private boolean useLocalCache;
    @RequestMapping("/get")
     public boolean get()
     {
         return useLocalCache;
     }
}

4.首先调用Nacos Server Api向Nacos Server发布配置:dataId为example.properties,内容为useLocalCache=111

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=111"

通过cmd的方式调用需要下载curl并加入到环境变量

(这个调用Api的操作也可以通过界面的方式去新建配置)

ps:curl是一款开源的用于数据传输命令行工具与库。你可以利用它来进行HTTP/HTTPS请求、上传/下载文件等,且支持Cookie、认证、代理、限速等。

通过这个请求,Nacos会在配置列表菜单下新建一个dataId为example.properties的配置,内容为useLocalCache=111

5.运行NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回的内容是111

6.再次调用Nacos Server Api向Nacos Server发布配置:dataId为example.properties,内容为useLocalCache=222

7.不用重启NacosCofigApplication,再次访问http:localhost:8080/config/get,返回的内容为222,说明程序中的useLocalCache值已经被动态更新了。

 

启动服务发现

Nacos作为微服务架构的注册发现中心和配置中心_第2张图片

创建两个应用,一个服务提供者,一个服务消费者,消费者调用提供者的服务。

1.添加依赖


     org.springframework.cloud
     spring-cloud-starter-alibaba-nacos-discovery
     ${latest.version}

2.添加并配置服务提供者,从而服务提供者可以通过Nacos的服务注册发现功能将其服务注册到Nacos Server上。

在application.properties中配置Nacos的地址:

server.port=8070
spring.application.name=server-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

通过Spring Cloud原生注解@EnableDiscoveryClient开启服务注册发现功能:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
       public static void main(String[] args) {
              SpringApplication.run(NacosProviderApplication.class, args);
      }
      @RestController class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                 return "Hello Nacos Discovery " + string;
            }
      }
}

3.添加并配置服务消费者,服务消费者可以通过Nacos的服务注册发现功能从Nacos Server上获取到它想要调用的服务。

在application.properties中配置Nacos Server的地址:

server.port=8080
spring.application.name=server-consumer
spring.cloud.discovery.server-addr=127.0.0.1:8848

通过Spring Cloud的原生注解@EnableDiscoveryClient开启服务注册发现功能。给@RestTemplate实例添加 @LoadBalanced注解,开启@LoadBalanced与Ribbon的集成:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
       @LoadBalanced
       @Bean
       public RestTemplate restTemplate() {
       return new RestTemplate();
       }
       public static void main(String[] args) { 
                 SpringApplication.run(NacosConsumerApplication.class, args);
       }
      @RestController
      public class TestController {
                private final RestTemplate restTemplate;
                @Autowired
                public TestController(RestTemplate restTemplate) {
                         this.restTemplate = restTemplate;
                }
               @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
               public String echo(@PathVariable String str) {
                           return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);  
               }
       }
}

4.启动ProviderApplication和ConsumerApplication,调用http://localhost:8080/echo/2019,返回内容为Hello Nacos Discovery 2019,服务调用成功。

你可能感兴趣的:(微服务)