SpringCloud 学习总结

SpringCloud 学习总结

服务注册中心 Nacos

官网:home (nacos.io)
nacos-server下载地址:Releases · alibaba/nacos (github.com)

第一步:运行nacos-server

nacos-server-2.1.1
acosin
目录下打开命令行窗口,输入startup.cmd -m standalone;访问http://localhost:8848/nacos,用户名、密码全部默认为 nacos

第二步:添加maven坐标

<dependency>            
    <groupId>com.alibaba.cloud</groupId>            
    <artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>        
</dependency>

第三步:写YML配置文件

  • 服务提供者 application.yml
## application.yml
server:  
  port:  
  
spring:  
  application:  
    name: nacos-payment-provider  
  cloud:  
    nacos:  
      discovery:  
        server-addr: localhost:8848 #配置Nacos地址  
  
management:  
  endpoints:  
    web:  
      exposure:  
        include: "*"
  • 服务消费者 application.yml
# 额外添加
service-url:  
  nacos-user-service: http://nacos-payment-provider

第四步:主启动类添加 @EnableDiscoveryClient


服务配置中心 Nacos

第一步:添加maven坐标

<dependency>            
    <groupId>com.alibaba.cloud</groupId>            
    <artifactId>spring-cloud-starter-alibaba-nacosconfig</artifactId>        
</dependency>

第二步:写YML配置文件

springboot 读取配置文件的优先级:**bootstrap.yml > application.yml

  • bootstrap.yml
# nacos配置  
server:  
  port: 3377  
  
spring:  
  application:  
    name: nacos-config-client  
  cloud:  
    nacos:  
      discovery:  
        server-addr: localhost:8848 # Nacos服务注册中心地址     
      config:  
        server-addr: localhost:8848 # Nacos作为配置中心地址_       
        file-extension: yaml  # 指定yaml格式的配置
        namespace: # 命名空间id
        group: DEV_GROUP
  • application.yml
spring:  
  profiles:  
    active: dev  # 开发环境

第三步:添加 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

第四步:在nacos配置管理栏中添加新配置

DataID:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
Group:`${spring.cloud.nacos.config.group}
配置格式:YAML

第五步:配置持久化

  1. 执行SQL文件:nacos-server-2.1.1
    acoscon
    acos-mysql.sql
  2. 修改配置文件:nacos-server-2.1.1
    acosconapplication.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=tr
db.user=
db.password=

服务接口调用 OpenFeign

官网:Spring Cloud OpenFeign

第一步:添加maven坐标

<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-openfeign</artifactId>  
</dependency>

第二步:主启动类添加 @EnableFeignClients

第三步:消费者业务接口添加 @FeignClient

  • 消费者 service 接口
@Component
@FeignClient(value = "service-provider")
public interface FeignService {
    @GetMapping(value = "/provider/getPort")
    String getServerPortOfProvider();
}
  • 提供者 controller类,服务名service-provider
@RestController
public class ProviderController {
    @Value("${server.port}")
    private String serverPort;
    
    @GetMapping(value = "/provider/getPort")
    public String getServerPortOfProvider() {
	    return this.serverPort;
    }
}

负载均衡服务调用 LoadBalancer

官网:云原生应用 (spring.io)

OpenFeign 内部依赖 loadBalancer。


服务网关 Gateway

官网:Spring Cloud Gateway

第一步:添加maven坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

第二步:写YML配置文件

spring:
  cloud:  
    gateway:  
      discovery:  
        locator:  
          enabled: true   # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:  
        - id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名  
          uri: lb://cloud-payment-service     #匹配后提供服务的路由地址  
          predicates:  
            - Path=/payment/get/**   # 断言,路径相匹配的进行路由  
  
        - id: payment_routh2 #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名  
          uri: lb://cloud-payment-service    #匹配后提供服务的路由地址  
          filters:
            - AddRequestHeader=X-Request-red, blue # 更多Gateway filter配置到官网查看
          predicates:  
            - Path=/payment/lb/**         # 断言,路径相匹配的进行路由
            - After=2017-01-20T17:42:47.789-07:00[America/Denver] # 更多断言配置到官网查看

第三步:自定义 GlobalFilter

@Component  
public class MyLogGateWayFilter implements GlobalFilter, Order {    
  
    @Override  
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {             
        String name = exchange.getRequest().getQueryParams().getFirst("name");  
        if (name == null) {  
            exchange.getResponse().setStatusCode(HttpStatus.MULTI_STATUS);  
            return exchange.getResponse().setComplete();  
        }  
        return chain.filter(exchange);  
    }  
  
    @Override  
    public int value() {  
        return 0;  
    }  
  
    @Override  
    public Class<? extends Annotation> annotationType() {  
        return null;  
    }  
}

服务熔断和限流 Sentinel

官网:home (sentinelguard.io)
下载地址:Releases · alibaba/Sentinel (github.com)

第一步:运行

java -jar sentinel-dashboard-1.8.5.jar
访问 sentinel 管理界面,账号密码均为 sentinel,http://localhost:8080

第二步:添加maven坐标

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- 用于流控规则持久化 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

第三步:写YML配置文件

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        #Nacos服务注册中心地址
        server-addr: localhost:8848
    sentinel:
      transport:
        #配置Sentinel dashboard地址
        dashboard: localhost:8080
        #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
        port: 8719

第四步:由于sentinel采用懒加载,需要执行一次访问

流控、降级、热点key限流、系统规则、@SentinelResource、熔断、规则持久化


分布式请求链路跟踪 Sleuth

下载:Central Repository: io/zipkin/zipkin-server (maven.org)

第一步:运行

java -jar zipkin-server-2.23.8-exec.jar

第二步:添加maven 坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

第三步:写YML 配置文件

spring:
  application:
    name: 
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1

第四步:访问浏览器界面

http://localhost:9411/


消息驱动 Stream

官网:Spring Cloud Stream
第一步:添加maven坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » SpringCloud 学习总结