Nacos的下载和使用请参考官网文档:
https://github.com/alibaba/spring-cloud-alibaba/wiki
项目代码地址:
https://gitee.com/yuld/springcloudalibaba.git
一 相关技术
1 Nacos Discovery 服务注册发现
2 Nacos Config 配置中心
3 SpringCloud GateWay 网关
4 SpringCloud OpenFeign 服务调用组件
二 项目概览
模块说明
1 common 公共模块
2 consumer 服务调用者
3 feign-api 服务提供者暴露出来的feign接口
4 gateway 网关模块
5 provider 服务提供者
三 相关代码
(只列出部分关键代码和配置,像pom.xml,工具类等代码不在这里列出)
prodiver模块代码
application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务注册地址
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto #主键自增
server:
port: 8000
application.yml里的配置可以移至nacos配置中心,步骤如下:
1 启动安装好的nacos,访问:http://127.0.0.1:8848/nacos/index.html
2 在配置管理-配置列表处新增配置

3 根据官方文档,需要创建bootstratp.yml,内容如下
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #配置中心地址
file-extension: yaml #由于在nacos配置中心创建的配置是yaml格式的,所以在此指定
enabled: true #默认为true,通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config
application:
name: provider #此处的name跟nacos创建的provider.yml名称要是一致的
官方文档如下:

最后在启动类上添加
@EnableDiscoveryClient //注册服务到nacos
启动即可,然后访问写好的接口 http://localhost:8000/city/getTree,结果如下:
服务列表:
feign-api模块代码
@FeignClient("provider") //服务名
public interface CityFeignService {
@GetMapping("/city/getTree")
Result getTree();
}
consumer模块代码
pom.xml引用feign-api模块,用于调用provider的服务
<dependency>
<groupId>com.dbzq</groupId>
<artifactId>feign-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
启动类添加
@EnableFeignClients({“com.dbzq.provider”}) //扫描feign接口
然后访问:http://localhost:9000/getCity,结果如下:
说明consumer成功调用provider的服务
gateway模块代码
前端的请求先走网关,然后网关根据请求路径去寻找对应的服务接口,最终响应给前端
所以gateway也是需要注册到nacos的,用于寻找服务
application.yml配置如下
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: city #路由id,唯一
uri: lb://consumer #负载到consumer
predicates:
- Path=/city/** #以city开头的请求都负载到consumer服务
filters:
- RewritePath=/city/(?<segment>.*), /$\{segment} #过滤掉url里的city,例如http://ip:port/city/getCity -> http://ip:port/getCity
server:
port: 80
因为我们指定以city开头的请求去访问consumer服务,而上面consumer的接口是
http://localhost:9000/getCity
没有包含city,所以需要把请求的city过滤掉,因此配置filters
最后访问网关:http://localhost/city/getCity,结果如下:
说明网关也搭建成功了
最后说下@EnableDiscoveryClient注解,其实配置文件中配置了ncaos.discovery.server-addr后,就会将服务注册到nacos,可以注释掉@EnableDiscoveryClient注解,然后启动项目查看日志:
nacos registry, provider 127.0.0.1:8000 register finished
provider需要将服务注册到nacos,给其他服务调用
consumer需要到nacos里查找服务,也需要注册到nacos
gateway需要根据请求判断负载到哪个具体服务,也需要注册到nacos
所以这三个服务都是需要配置ncaos.discovery.server-addr的
至于@EnableDiscoveryClient,不加也可以成功注册到nacos
完整的代码请自行拉取:
https://gitee.com/yuld/springcloudalibaba.git