免费资源网 – https://freexyz.cn/

目录
  • 前言
  • 一、Nacos是什么?
  • 二、部署Nacos
    • 1.下载安装
    • 2.启动服务
    • 3.单机模式的部署
  • 三、服务注册
    • 1.注册生产者(用来提供远程访问接口的服务)
    • 2.注册消费者(用来远程访问接口的服务)
  • 四、配置管理
    • 1.管理配置
    • 2.访问配置
  • 总结

    前言

    之前微服务的注册配置用的是Eureka,因为Eureka已经停止更新了,所以这篇我们简单聊一下阿里的Nacos,比较基础,仅供学习用。

    一、Nacos是什么?

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

    Nacos官网文档:Nacos文档

    二、部署Nacos

    1.下载安装

    下载(图例):

    如何用nacos搭建微服务注册配置中心

    点击上图中的url会跳转到GitHub,选择对应的Windows或者linux的版本下载即可,我这里使用的Windows系统,下载.zip文件

    如何用nacos搭建微服务注册配置中心

    2.启动服务

    下载解压后对应有bin、conf、log等目录,我们进去bin目录直接双击击startup.cmd文件启动服务会发现报错,因为nacos还需要进行部署

    其部署方式有三种:单机模式、集群模式、多集群模式(来自官网文档)

    这里我们为了简单的学习和使用,部署单机模式。

    3.单机模式的部署

    1)在自己的mysql数据库中新建一个数据库,名字为nacos

    2)在nacos数据库下执行在刚解压的conf目录下的nacos-mysql.sql文件,会添加一些表

    3)修改conf目录下的application.properties,内容如下(即连接mysql数据库的连接配置):

    ### Count of DB:
    db.num=1
    ### Connect URL of DB:
    db.url=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
    

    4)修改bin目录下的startup.cmd文件,内容如下(修改nacos的部署模式为单机模式):

    set MODE="standalone"
    

    5)都配置完成后再次双击击bin目录下的startup.cmd启动服务看是否能成功启动,nacos的默认端口是:8848,然后访问http://localhost:8848/nacos/index.html并以用户名密码都为nacos登录进去就可以进行服务的配置和注册。

    成功启动截图

    如何用nacos搭建微服务注册配置中心

    成功访问截图

    如何用nacos搭建微服务注册配置中心

    三、服务注册

    1.注册生产者(用来提供远程访问接口的服务)

    使用idea新建一个项目springboot项目,然后在项目下新建一个名为providerser模块作为一个生产者微服务,maven依赖如下:

    	<properties>
    			<java.version>1.8</java.version>
    			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    		</properties>
    	<dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>com.alibaba.cloud</groupId>
    		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>com.alibaba.cloud</groupId>
    		<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<optional>true</optional>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    		<exclusions>
    			<exclusion>
    				<groupId>org.junit.vintage</groupId>
    				<artifactId>junit-vintage-engine</artifactId>
    			</exclusion>
    		</exclusions>
    	</dependency>
    </dependencies>
    <dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>com.alibaba.cloud</groupId>
    				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
    				<version>${spring-cloud-alibaba.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    

    在application.properties的配置如下:

    ##服务提供者server provider
    server.port=8081
    spring.application.name=providerser
    ##nacos注册中心地址
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    #允许其他服务通过注册中心发现该服务#
    eureka.instance.prefer-ip-address= true
    

    在启动类上添加注解@EnableDiscoveryClient进行服务注册:

    ##服务提供者server provider
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderserApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(ProviderserApplication.class, args);
    	}
    }
    

    新建一个controller类,在类中写一个供远程访问的接口(正常的接口即可):

    @RestController
    @Slf4j
    @RequestMapping("/provider")
    public class ProviderController {
        @RequestMapping(value="/getUserList")
        public List<String> getUserList(){
            log.info("开始调用start");
            List<String> result=new ArrayList<>();
            result.add("test1");
            result.add("test2");
            result.add("test3");
            result.add("test4");
            result.add("test5");
            result.add("test6");
            log.info("调用end");
            return  result;
        }
    }
    

    成功启动该模块后会自动在nacos中注册该服务,在nacos的服务管理下的服务列表中可查看到,如图:

    如何用nacos搭建微服务注册配置中心

    2.注册消费者(用来远程访问接口的服务)

    同样在项目下新建一个名为consumerser模块作为一个消费者微服务,maven依赖如下:

    	<properties>
    			<java.version>1.8</java.version>
    			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    		</properties>
    	<dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
           </dependency>
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-openfeign</artifactId>
    		<version>2.2.3.RELEASE</version>
    	</dependency>
           <dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    		<exclusions>
    			<exclusion>
    				<groupId>org.junit.vintage</groupId>
    				<artifactId>junit-vintage-engine</artifactId>
    			</exclusion>
    		</exclusions>
    	</dependency>
    </dependencies>
    <dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>com.alibaba.cloud</groupId>
    				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
    				<version>${spring-cloud-alibaba.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    

    在application.properties的配置如下:

    server.port=8082
    spring.application.name=consumerser
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    

    在启动类上添加注解@EnableDiscoveryClient进行服务注册,同时添加@EnableFeignClients注解(采用Feign进行远程接口访问):

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

    写远程访问接口,类似service层,这里指向的是生产者对应的接口(即远程访问生产者的接口):

    //这里写远程调用服务注册的服务名(spring.application.name中配置的内容)
    @FeignClient(value="providerser")
    public interface UserApi {
        //这里写要调用的远程服务接口
        @RequestMapping(value = "/provider/getUserList",method = RequestMethod.POST)
        List<String> getFeignList();
    }
    

    写远程访问接口,controller层:

    @RestController
    @RequestMapping(value = "/remoteApi")
    public class ConsumerController {
        @Autowired
        private UserApi UserApi;
        @RequestMapping("/getFeignList")
        public List<String> getFeignList(){
            return this.UserApi.getFeignList();
        }
    }
    

    同样的,成功启动该模块后会自动在nacos中注册该服务,在nacos的服务管理下的服务列表中同样可查看到,如图:

    如何用nacos搭建微服务注册配置中心

    使用postman测试,调用消费者微服务的接口,然后消费者会远程调用生产者的接口返回的数据:

    如何用nacos搭建微服务注册配置中心

    四、配置管理

    当服务数量超过一定程度之后,如果需要在每个服务里面分别维护每一个服务的配置文件,运维人员估计要哭了。

    如下图所示,你所有的配置文件都会在配置列表里面,我们这里配置好后,直接可以启用一个访问配置的服务,通过接口获取到对应配置文件的所有内容。

    也可以直接进入这个页面进行实时远程的更改。

    如何用nacos搭建微服务注册配置中心

    1.管理配置

    就不需要过多介绍了,直接在上图对对应的配置文件进行增删改查操作就ok。

    点加号进行配置,配置成功后如下图:

    如何用nacos搭建微服务注册配置中心

    2.访问配置

    在项目再下新建一个名为configser模块作为一个配置文件访问服务,maven依赖如下:

    	<properties>
    			<java.version>1.8</java.version>
    			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    		</properties>
    	<dependencies>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-openfeign</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-test</artifactId>
    		<scope>test</scope>
    		<exclusions>
    			<exclusion>
    				<groupId>org.junit.vintage</groupId>
    				<artifactId>junit-vintage-engine</artifactId>
    			</exclusion>
    		</exclusions>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-actuator</artifactId>
    	</dependency>
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    		<version>0.2.1.RELEASE</version>
    	</dependency>
    </dependencies>
    <dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>com.alibaba.cloud</groupId>
    				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
    				<version>${spring-cloud-alibaba.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    

    在application.properties的配置如下:

    spring.profiles.active=dev
    server.port=8083
    

    新建一个文件bootstrap.properties,配置内容如下:

    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.application.name=configser
    spring.cloud.nacos.config.file-extension=properties
    management.endpoints.web.exposure.include=*
    

    写访问配置文件内容的接口,controller层:

    @RestController
    @RequestMapping("/config")
    //修改后能自动根据修改进行刷新注解
    @RefreshScope
    public class ConfigController {
        @Value("${useLocalCache}")
        private String useLocalCache;
        @RequestMapping("/get")
        public String getConfigSet(){
            return useLocalCache;
        }
    }
    

    使用postman测试,调用配置服务的接口,会返回之前在配置中心中配置好的数据useLocalCache的值,如图:

    如何用nacos搭建微服务注册配置中心

    总结

    好的,对nacos的简单介绍到此结束,我其实也是为了对微服务的进一步的学习和加深理解!

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

    免费资源网 – https://freexyz.cn/

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。