Nacos (Spring Cloud) 注册中心与配置中心(spring cloud 注册中心选型)

  本篇文章为你整理了Nacos (Spring Cloud) 注册中心与配置中心(spring cloud 注册中心选型)的详细内容,包含有springboot nacos注册中心 spring cloud 注册中心选型 spring cloud 注册中心和网关 nacos注册中心调用 Nacos (Spring Cloud) 注册中心与配置中心,希望能帮助你了解 Nacos (Spring Cloud) 注册中心与配置中心。

   Nacos是由阿里巴巴团队使用 Java 语言开发的开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  
Nacos 是什么

  Nacos (Dynamic Naming and Configuration Service),其命名由三部分组成:

  Na (naming/nameServer),即服务注册中心。

  co (configuration),即配置中心。

  s (service),即服务,表示 Nacos 实现的服务注册中心和配置中心都是以服务为核心的。

  Nacos是由阿里巴巴团队使用 Java 语言开发的开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台(Nacos官网)。

  Nacos 的特性

  服务发现及管理

  1、Nacos 注册中心

  注册中心主要有三部分组成:

  Nacos-Server:注册中心

  ​ 提供服务的注册和发现。

  Nacos-Provider:服务提供方

  ​ 把自身的服务实例注册到 Nacos Server 中。

  Nacos-Consumer:服务调用方

  ​ 通过 Nacos Server 获取服务列表,消费服务。

  2、服务发现及管理

  
动态服务发现

  当服务实例启动之后,向注册中心登记自己的地址信息,这样服务调用方就可以通过服务名称从注册中心获取此服务的信息,从而调用此服务的实例。

  并且 Nacos 支持 Rest (Get、Post请求) 与 RPC (Dubbo) 模式的服务发现。

  
为防止将请求发往不健康的主机或服务实例。

  注册中心会监听实例的心跳:注册的实例会定时向注册中心发送请求,表明自己健康,当注册中心无法再接收到实例发送的请求(实例请求停止或请求无法发送到注册中心等不健康状态),即心跳停止,注册中心就会清理该实例信息。

  
配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,项目后期的配置管理困难。

  配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护,这比较困难。

  配置文件无法实时更新。修改配置文件之后,必须重新启动微服务才能使配置生效,这对一个正在运行的项目来说是非常不友好的。

  动态配置服务让我们以中心化、外部化和动态化的方式管理所有环境的配置。通俗的讲:

  
动态化:

  当配置中心中的参数更新的时候,各个服务也能实时同步最新配置,使之动态更新。

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

  以 1.4.1 版本为例

  将安装包上传到Linux,解压

  

[root@localhost ~]# cd /[upload]

 

  [root@localhost [upload]]# tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local

  

 

  [upload]:上传目录

  启动和关闭

  启动:

  

[root@localhost local]# cd nacos/bin/

 

  [root@localhost bin]# ./startup.sh -m standalone #单例模式启动

  ... ...

  nacos is starting with standalone

  nacos is starting,you can check the /usr/java/nacos/logs/start.out

  [root@localhost bin]#

  

 

  关闭:

  

[root@localhost bin]# ./shutdown.sh

 

  The nacosServer(3543) is running...

  Send shutdown request to nacosServer(3543) OK

  [root@localhost bin]#

  

 

  Nacos 开机自启:

  添加 nacos.service 文件

  

[root@localhost bin]# vim /lib/systemd/system/nacos.service

 

  [Unit]

  Description=nacos

  After=network.target

  [Service]

  Type=forking

  ExecStart=/usr/local/nacos/bin/startup.sh -m standalone

  ExecReload=/usr/local/nacos/bin/shutdown.sh

  ExecStop=/usr/local/nacos/bin/shutdown.sh

  PrivateTmp=true

  [Install]

  WantedBy=multi-user.target

  [root@localhost bin]#

  

 

  修改JAVA_HOME路径为绝对路径并注释之后的3行配置,如下:

  

[ ! -e "$JAVA_HOME/bin/java" ] JAVA_HOME=/usr/local/jdk1.8.0_181 

 

  #[ ! -e "$JAVA_HOME/bin/java" ] JAVA_HOME=/usr/java

  #[ ! -e "$JAVA_HOME/bin/java" ] JAVA_HOME=/opt/taobao/java

  #[ ! -e "$JAVA_HOME/bin/java" ] unset JAVA_HOME

  

 

  设置开机自启

  

[root@localhost bin]# systemctl daemon-reload #重新加载服务配置

 

  [root@localhost bin]# systemctl enable nacos.service #设置为开机启动

  [root@localhost bin]# systemctl start nacos.service #启动nacos服务

  [root@localhost bin]# systemctl stop nacos.service #停止nacos服务

  

 

  使用浏览器访问:http://192.168.233.132:8848/nacos,默认用户名/密码为:nacos/nacos

  Nacos 与 Spring Cloud

  首先让我们搭建一个简单的项目来体验Nacos

  创建 springcloud_parent 管理项目依赖

  pom:

  

 dependencyManagement 

 

   dependencies

   !--Spring Boot--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-dependencies /artifactId

   version 2.3.2.RELEASE /version

   type pom /type

   scope import /scope

   /dependency

   !--spring cloud Netflix--

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-dependencies /artifactId

   version Hoxton.SR9 /version

   type pom /type

   scope import /scope

   /dependency

   !--spring cloud 阿里巴巴--

   dependency

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-alibaba-dependencies /artifactId

   version 2.2.6.RELEASE /version

   type pom /type

   scope import /scope

   /dependency

   /dependencies

   /dependencyManagement

  

 

  创建 springcloud_common

  pojo:

  

public class User {

 

   private Integer id;

   private String name;

   private Integer age;

   public User() {

   public User(Integer id, String name, Integer age) {

   this.id = id;

   this.name = name;

   this.age = age;

   public Integer getId() {

   return id;

   public void setId(Integer id) {

   this.id = id;

   public String getName() {

   return name;

   public void setName(String name) {

   this.name = name;

   public Integer getAge() {

   return age;

   public void setAge(Integer age) {

   this.age = age;

  

 

  创建 nacos_provider

  pom:

  

 dependencies 

 

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   dependency

   groupId com.magicmouse /groupId

   artifactId springcloud_common /artifactId

   version 1.0-SNAPSHOT /version

   /dependency

   /dependencies

  

 

  service:

  

@Service

 

  public class UserServiceImpl implements UserService {

   @Override

   public User getUserById(Integer id) {

   return new User(id,"Nacos",4);

  

 

  controller:

  

@RestController

 

  @RequestMapping("/provider")

  public class ProviderController {

   @Autowired

   private UserService userService;

   @RequestMapping("/getUserById/{id}")

   public User getUserById(@PathVariable Integer id){

   return userService.getUserById(id);

  

 

  创建 nacos_consumer

  pom:

  

 dependencies 

 

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-web /artifactId

   /dependency

   dependency

   groupId com.bjpowernode /groupId

   artifactId springcloud_common /artifactId

   version 1.0-SNAPSHOT /version

   /dependency

   /dependencies

  

 

  config:

  

@Configuration

 

  public class ConfigBean {

   @Bean

   public RestTemplate restTemplate(){

   return new RestTemplate();

  

 

  controller:

  调用其它服务发布的接口,具体实现会在后面介绍

  nacos_provider

  1、引入依赖

  

 dependencies 

 

   ··· ···

   dependency

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-discovery /artifactId

   /dependency

   ··· ···

   /dependencies

  

 

  2、修改配置文件 application.yml

  

spring:

 

   cloud:

   nacos:

   discovery:

   server-addr: 192.168.233.132:8848 #nacos服务的地址

   application:

   name: nacos-provider #向注册中心注册的名字

  

 

  3、启动类添加 @EnableDiscoveryClient 注解

  nacos_consumer

  1、引入依赖

  

 dependencies 

 

   ··· ···

   dependency

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-discovery /artifactId

   /dependency

   ··· ···

   /dependencies

  

 

  2、修改配置文件 application.yml

  

server:

 

   port: 80

  spring:

   cloud:

   nacos:

   discovery:

   server-addr: 192.168.233.132:8848 #nacos服务的地址

   application:

   name: nacos-consumer #向注册中心注册的名字

  

 

  3、启动类添加 @EnableDiscoveryClient 注解

  4、controller

  

@RestController

 

  @RequestMapping("/consumer")

  public class ConsumerController {

   @Autowired

   private RestTemplate restTemplate;

   @Autowired

   private DiscoveryClient discoveryClient;

   @RequestMapping("/getUserById/{id}")

   public User getUserById(@PathVariable Integer id){

   //获取nacos中注册的所有服务信息

   List String serviceList = discoveryClient.getServices();

   //获取nacos中注册的指定服务信息

   ServiceInstance instance = discoveryClient.getInstances("nacos-provider").get(0);

   String serviceUrl = instance.getHost() + ":" + instance.getPort();

   String url = "http://"+serviceUrl+"/provider/getUserById/"+id;

   return restTemplate.getForObject(url, User.class);

  

 

  创建 nacos_config

  1、引入依赖

  

 !-- 添加 Nacos 配置中心依赖 -- 

 

   dependency

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-config /artifactId

   /dependency

  

 

  2、修改配置文件 bootstrap.yml

  配置文件的名称需要为:bootstrap.yml

  bootstrap.yml 比 application.yml 优先加载

  bootstrap.yml 可以理解为用于系统级参数的配置,这些参数一般是不会变动。并且bootStrap.yml 被加载后,内容不会被覆盖。

  application.yml 用于SpringBoot项目的自动化配置。

  
server-addr: 192.168.233.132:8848 #nacos服务的地址

   file-extension: yaml #后缀名,只支持 properties 和 yaml 类型

   prefix: nacos-config #文件名,如果没有配置则默认为 ${spring.appliction.name}

  

 

 

  3、启动类添加 @EnableDiscoveryClient 注解

  4、controller

  

@RestController

 

  @RefreshScope //重新从BeanFactory获取一个新的实例(该实例使用最新的配置)

  public class ConfigController {

   @Value("${spring.datasource.driver-class-name}")

   private String driverClassName;

   @Value("${spring.datasource.url}")

   private String url;

   @Value("${spring.datasource.username}")

   private String username;

   @Value("${spring.datasource.password}")

   private String password;

   @Value("${spring.datasource.type}")

   private String type;

   @GetMapping("/config/info")

   public String getConfigInfo() {

   System.out.println(this);

   String configInfo = driverClassName+" br "+url+" br "+username+" br "

   +password+" br "+type;

   return configInfo;

  

 

  在 Nacos 中添加配置信息

  Nacos的Data ID

  
在 Nacos 中,dataId(配置文件的命名规则) 的完整格式如下:

  ${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}

  
spring.cloud.nacos.config.prefix:默认是当前服务的服务名称

  spring.cloud.nacos.config.file-extension:配置文件的格式(后缀),目前只支持yaml和properties

  
创建配置文件

  

server:

 

   port: 80

  spring:

   cloud:

   nacos:

   discovery:

   server-addr: 192.168.233.132:8848

   application:

   name: nacos-config

   datasource:

   driver-class-name: com.mysql.jdbc.Driver

   url: jdbc:mysql://127.0.0.1:3306/user?characterEncoding=UTF-8

   username: root

   password: root

   type: com.alibaba.druid.pool.DruidDataSource

  

 

  发布成功后点击返回即可。

  启动时会从Nacos加载配置文件:

  浏览器访问:http://127.0.0.1/config/info :

  在 Nacos 中将spring.datasource.password改为123456,当修改配置文件后nacos监听到MD5有变化则推送消息给客户端,客户端收到消息后会拉取最新配置:

  刷新浏览器页面:

  以上就是Nacos (Spring Cloud) 注册中心与配置中心(spring cloud 注册中心选型)的详细内容,想要了解更多 Nacos (Spring Cloud) 注册中心与配置中心的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: