day2 springcloud组件(nacos注册/配置中心 feign组件请求调用 gateway网关)

springcloud相关配置

官方文档https://github.com/alibaba/spring-cloud-alibaba

在公共模块common中的pom.xml中加入

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
dependencyManagement是作为依赖管理的配置 里面的dependency配置包没有引入 作用相当于为以后引入的com.alibaba.cloud包定义了版本号




一.nacos服务注册中心Nacos Discovery
官方https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md
1)pom.xml引入依赖 
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

2)nacos安装及配置
https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.zip
https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
将startup.cmd中的MODE="cluster"集群模式改为MODE="standalone"单机模式 启动startup.cmd
默认启动端口8848
在需要使用注册中心的模块中yml加入配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
启动类中加上注解@
EnableDiscoveryClient即注册到了注册中心

nacos还有管理平台http://localhost:8848/nacos
默认账号密码nacos/nacos
此时服务列表为空 因为需为服务起名才能看见 yml加上
spring.application.name=名称 就能看到了



二.Fengin远程调用其它服务组件
1)引入依赖
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)配置过程

启动类加上去扫描feign包的注解
  @EnableFeignClients(basePackages = "com.hb.gulimail.member.feign")
扫描包中新增个Feign接口 如
@FeignClient("coupon")
public interface FeignTest {
@RequestMapping("/coupon/coupon/list")
public R list();
}
@FeignClient("coupon")是配置需调用的服务名 同时会自动注入bean
@RequestMapping即调用coupon服务中对应的接口



三.nacos配置中心
1)引入nacos配置中心依赖
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>

 2)添加/src/main/resources/bootstrap.properties

spring.application.name=coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
//bootstrap.properties优先级比spplication.properties高
//服务名为coupon对应的在nacos的配置文件是coupon.properties

可以在controller中加上@RefreshScope热加载

3)配置命名空间/组

nacos中有命名空间菜单选项 对配置文件配置管理中有group组的选项

建议配置命名空间/组最终方案:每个微服务创建自己的命名空间,然后使用配置分组区分环境(dev/test/prod)

  即每个微服务都创建命名空间 每个空间中的配置文件都区分(dev/test/prop)环境

# 可以选择对应的命名空间 # 写上对应环境的命名空间ID
spring.cloud.nacos.config.namespace=b176a68a-6800-4648-833b-be10be8bab00
# 更改配置分组
spring.cloud.nacos.config.group=DEFAULT_GROUP

#默认nacos中的配置文件名称是 服务名.properties 改为yaml后缀方式为

#指定文件类型
spring.cloud.nacos.config.file-extension=yaml

 

4)多配置集

项目的配置信息可能不会全放同一个配置文件中 nacos也考虑到这种情况

 )bootstrap.properties中配置

//指定nacos中配置文件的位置 组
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true

四.Gateway网关

网关是请求流量的入口,常用功能包括路由转发,权限校验,限流控制等。springcloud gateway取代了zuul网关。

1)三大核心概念

Route: 发一个请求给网关,网关要将请求路由到指定的服务。路由有id,目的地uri,断言的集合,匹配了断言就能到达指定位置
Predicate断言: 就是java里的断言函数,匹配请求里的任何信息,包括请求头等。根据请求头路由哪个服务
Filter: 过滤器请求和响应都可以被修改。
//白话:断言就是根据请求中的信息判断得请求到 可能类似mvc的handlemapping

断言 过滤器参考

https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gateway-request-predicates-factories

https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gatewayfilter-factories

2)配置例子

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

        - id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?<segment>.*),/${segment}

        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty/(?<segment>.*),/${segment}

        - id: member_route
          uri: lb://gulimall-member
          predicates:
            - Path=/api/member/**
          filters:
            - RewritePath=/api/(?<segment>.*),/${segment}

        - id: ware_route
          uri: lb://gulimall-ware
          predicates:
            - Path=/api/ware/**
          filters:
            - RewritePath=/api/(?<segment>.*),/${segment}

        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/${segment}
原文地址:https://www.cnblogs.com/hbhb/p/14500311.html