使用nacos作服务注册中心和配置中心

nacos

    • 1 Nacos 环境搭建
    • 2 注册中心,注册中心有何作用?
    • 3 Feign服务调用
    • 4 配置中心
    • 5 自定义数据库

nacos是什么?看下nacos官方介绍:

Nacos 致力于帮助您发现、配置和管理微服务。
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

nacos的主要应用:

  • 服务发现和服务健康监测。
  • 动态配置服务。
  • 动态DNS服务。
  • 服务及元数据管理。

nacos生态地图:
使用nacos作服务注册中心和配置中心_第1张图片

1 Nacos 环境搭建

1 Nacos官方给出运行环境的要求,需要先满足环境要求才能成功启动Nacos,为了避免jar冲突,我们可以看一下nacos及其他组件的版本关系
使用nacos作服务注册中心和配置中心_第2张图片

Nacos依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。

2 选择下载最新的免安装包,下载地址:https://github.com/alibaba/nacos/tags
这里我们选择nacos的单机启动方式,在cmd下进入nacos的bin目录执行以下命令

 ./startup.cmd -m standalone
 # 如果是linux环境
 ./startup.sh -m standalone

3 nacos的默认端口时8848,启动nacos后,输入地址localhost:8848/nacos/,即可进入nacos后台,账号密码都是nacos,可以看到nacos的安装部署极其简单。
使用nacos作服务注册中心和配置中心_第3张图片

2 注册中心,注册中心有何作用?

1 新建一个空的maven工程,然后添加module为springboot工程
使用nacos作服务注册中心和配置中心_第4张图片
2.我们以其中的articlecenter为例子,添加maven配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.2.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-commons</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.11</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

3 application.properties添加配置

server.port=8091
spring.application.name=articlecenter
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

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

4 启动类上添加@EnableDiscoveryClient注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // nacos服务发现
public class ArticlecenterApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(ArticlecenterApplication.class, args);
    }
}

编写一个测试用例:

@Slf4j
@RequestMapping("article")
@RestController
public class ArticleController {
     
    @GetMapping("/look")
    public String test(){
     
        log.info("look article");
        return "look article";
    }
}

5 启动ArticlecenterApplication,刷新nacos后台就能看到这个articlecenter服务到nacos上了
使用nacos作服务注册中心和配置中心_第5张图片
注册上nacos的服务会定时的发送心跳信息给nacos,告诉nacos我这个服务还活着,同事naocos也会定时刷新可用列表,删掉太久没发心跳的服务

3 Feign服务调用

Feign是一种声明式,模板化的HTTP客户端,它能够调用本地方法一样调用远程方法,无感知远程http请求

1 为了说明服务调用,我们按照之前的方式,新建一个usercenter服务,同样的注册到nacos中。
使用nacos作服务注册中心和配置中心_第6张图片
2 添加依赖

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

3 主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient  //nacos
@EnableFeignClients  //feign
public class UsercenterApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(UsercenterApplication.class, args);
    }
}

4 回到articlecenter中编写远程调用的请求

@Slf4j
@RequestMapping("article")
@RestController
public class ArticleController {
     
    @GetMapping("/look/{id}")
    public String look(@PathVariable(name = "id") String id){
     
        return id+" look article!";
    }
}

5 编写远程调用接口,name来指定FeignClient的名称,url可以指定@FeignClient调用的地址,一般用于测试

@Component
@FeignClient( name = "articlecenter", url = "http://127.0.0.1:8091") 
public interface FeignTest {
     
    @GetMapping("/article/look/{id}")
    public String look(@PathVariable("id") String id);
}

编写一个测试接口,注入FeifnTest即可使用


@Slf4j
@RequestMapping("user")
@RestController
public class UserController {
     

    @Autowired
    private FeignTest feignTest;

    @RequestMapping("/lookArticle")
    public String lookArticle(){
     
        String id = "ZhangSan";
        String str = feignTest.look(id);
        System.out.println("usercenter call "+str);
        return "usercenter call "+str;
    }
}

在地址栏中输入http://localhost:8090/user/lookArticle,就会输出usercenter call ZhangSan look article!,完成从usercenter调用articlecenter的接口。

4 配置中心

配置中心主要用于管理微服务项目的配置文件。当我们修改一个配置参数时,需要重新打包发布,过程缓慢,而nacos可以让我们修改的参数立即生效。

在项目开发中,项目的配置文件里一般会加上profile,比如dev是开发环境、test是测试环境、pro是生产环境的配置。每种配置的参数不同,如数据源的切换。

1 添加依赖

<!-- 配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>

2 假设当前需要将usercenter的运行环境切换至开发环境

server.port=8090
spring.profiles.active=dev
spring.application.name=usercenter
spring.cloud.nacos.config.server-addr=192.168.174.31:8848

3 nacos创建配置usercenter-dev.properties
使用nacos作服务注册中心和配置中心_第7张图片
使用nacos作服务注册中心和配置中心_第8张图片
4 测试获取nacos配置文件中的信息

@Slf4j
@RefreshScope // 自动感知配置文件变化
@RequestMapping("test")
@RestController
public class TestController {
     

    // 从配置文件获取属性值
    @Value("${dev.url}")
    private String url;

    @RequestMapping("/url")
    public String message() {
     
        log.info(url);
        return url;
    }
}

使用nacos作服务注册中心和配置中心_第9张图片

5 自定义数据库

使用nacos作服务注册中心和配置中心_第10张图片
1 默认情况下,nacos是使用了一个嵌入式数据库。可自定义数据库,但目前支持mysql。conf目录下,修改application.properties文件,将以下信息修改为个人数据库配置。
使用nacos作服务注册中心和配置中心_第11张图片

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

2 新建一个数据库名为nacos,将conf/nacos-mysql.sql 表结构导入到自己的数据库中,会看到以下nacos配置表
使用nacos作服务注册中心和配置中心_第12张图片

3 重启nacos,之后添加配置文件,在config_info表里看到配置文件内容。

参看文章:Nacos官方文档

你可能感兴趣的:(springcloud,spring)