微服务之Nacos+GateWay

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


版权声明:本文为weixin_38470396原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。