前言
之前微服务的注册配置用的是eureka,因为eureka已经停止更新了,所以这篇我们简单聊一下阿里的nacos,比较基础,仅供学习用。
一、nacos是什么?
nacos 致力于帮助您发现、配置和管理微服务。nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。摘自官网文档(狗头)。
nacos官网文档:nacos文档
二、部署nacos
1.下载安装
下载(图例):
点击上图中的url会跳转到github,选择对应的windows或者linux的版本下载即可,我这里使用的windows系统,下载.zip文件
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登录进去就可以进行服务的配置和注册。
成功启动截图
成功访问截图
三、服务注册
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的服务管理下的服务列表中可查看到,如图:
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的服务管理下的服务列表中同样可查看到,如图:
使用postman测试,调用消费者微服务的接口,然后消费者会远程调用生产者的接口返回的数据:
四、配置管理
当服务数量超过一定程度之后,如果需要在每个服务里面分别维护每一个服务的配置文件,运维人员估计要哭了。
如下图所示,你所有的配置文件都会在配置列表里面,我们这里配置好后,直接可以启用一个访问配置的服务,通过接口获取到对应配置文件的所有内容。
也可以直接进入这个页面进行实时远程的更改。
1.管理配置
就不需要过多介绍了,直接在上图对对应的配置文件进行增删改查操作就ok。
点加号进行配置,配置成功后如下图:
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的简单介绍到此结束,我其实也是为了对微服务的进一步的学习和加深理解!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论