肝了很久,冰河整理出这份4万字的SpringCloud与SpringCloudAlibaba学习笔记!

org.springframework.cloud

spring-cloud-starter-openfeign

  1. 启动类启用Feign

@SpringBootApplication

@EnableEurekaClient

@EnableDiscoveryClient

@EnableFeignClients

  1. 新建接口 并注册Feign信息

@Component

@FeignClient(value = “CLOUD-PAYMENT-SERVICE”) //提供方服务名

public interface Service {

@GetMapping(value = “/payment/get/{id}”)

Response getPaymentById(@PathVariable(“id”) Long id);

}

  1. 提供方接口演示

@GetMapping(value = “/payment/get/{id}”)

public Response getPaymentById(@PathVariable(“id”) Long id) {

Payment payment = paymentService.getPaymentById(id);

if (payment != null) {

return Result.success(200, "查询成功,serverPort: " + serverPort, payment);

} else {

return Result.success(444, "没有对应记录,查询ID: " + id, null);

}

}

OpenFeign超时设置

ribbon:

#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间

ReadTimeout: 5000

#指的是建立连接后从服务器读取到可用资源所用的时间

ConnectTimeout: 5000

OpenFeign 日志打印功能
  1. 配置Openfeign 日志级别

@Configuration

public class FeignLogConfig {

@Bean

public Logger.Level getLevel() {

return Logger.Level.FULL;

}

}

  1. yml 项目配置文件中,给指定Feign interface 配置日志级别

logging:

level:

ml.ytooo.feignservice.Service: debug

Hystrix 服务治理

  • 服务降级 出险异常时,返回友好提示,防止程序异常或者阻塞

  • 服务熔断 保险丝,当超出服务承载能力时,返回提示,拒绝请求

  • 服务限流 闸门,配置服务承载能力

Hystrix
服务降级
当服务处理超时或者运行异常时,启动备选方案返回给调用者预期结果

主方法

@EnableCircuitBreaker

需要降级处理的程序

其中

  • paymentInfo_TimeOut 为预计超时程序

  • paymentInfo_TimeOut_Handler 为超时备选方案

@HystrixCommand(fallbackMethod = “paymentInfo_TimeOut_Handler”, commandProperties = {

@HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”, value = “3000”)

})

public String paymentInfo_TimeOut(Integer id) {

int time = 5;

try { TimeUnit.MILLISECONDS.sleep(time * 1000); } catch (InterruptedException e) { e.printStackTrace(); }

return "线程池: " + Thread.currentThread().getName() + " paymentInfo_TimeOut,id: " + id + “\t” + “O(∩_∩)O哈哈~” + " 耗时(秒): " + time;

}

public String paymentInfo_TimeOut_Handler(Integer id) {

return "线程池: " + Thread.currentThread().getName() + " paymentInfo_TimeOut_Handler,id: " + id + “\t” + “o(╥﹏╥)o”;

}

全局降级处理

配置 defaultFallback 的走自己的降级方法,未配置的走 默认@DefaultProperties 指定的降级方法

@RestController

@Slf4j

@DefaultProperties(defaultFallback = “globle”,commandProperties = {

@HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”, value = “1500”)

})

public class Controller {

@HystrixCommand

@GetMapping(“/timeout/{id}”)

public String paymentInfo_TimeOut(@PathVariable(“id”) Integer id) {

String result = feignService.paymentInfo_TimeOut(id);

log.info("*****result: " + result);

return result;

}

public String globle() {

return “全局”;

}

}

通过OpenFeign 配置其提供方全局降级配置
  1. 新增feign调用接口的实现类 FeignServiceImpl,实现全部方法并做降级处理

@Service

public class FeignServiceImpl implements FeignService {

@Override

public String paymentInfo_OK(Integer id) {

return “降级 – paymentInfo_OK”;

}

@Override

public String paymentInfo_TimeOut(Integer id) {

return “降级 – paymentInfo_TimeOut”;

}

}

  1. feign调用接口添加注解

@FeignClient(value = “CLOUD-PROVIDER-HYSTYRIX-PAYMENT”,fallback = FeignServiceImpl.class)

服务熔断
  • 服务过载时,拒绝连接请求直接调用降级方法,返回异常

  • 请求下降时,慢慢恢复该服务访问,直达完全恢复

配置服务的熔断:

一下配置在 10s 内 ,10次请求有60% 失败,则熔断

HystrixProperty 配置位于 HystrixCommandProperties.class 类中

//=====服务熔断

@HystrixCommand(fallbackMethod = “paymentCircuitBreaker_fallback”,commandProperties = { //

@HystrixProperty(name = “circuitBreaker.enabled”,value = “true”),// 是否开启断路器

@HystrixProperty(name = “circuitBreaker.requestVolumeThreshold”,value = “10”),// 请求次数

@HystrixProperty(name = “circuitBreaker.sleepWindowInMilliseconds”,value = “10000”), // 时间窗口期

@HystrixProperty(name = “circuitBreaker.errorThresholdPercentage”,value = “60”),// 失败率达到多少百分百后跳闸

})

public String paymentCircuitBreaker(@PathVariable(“id”) Integer id)

{

if(id < 0)

{

throw new RuntimeException(“******id 不能负数”);

}

String serialNumber = IdUtil.simpleUUID();

return Thread.currentThread().getName()+“\t”+"调用成功,流水号: " + serialNumber;

}

public String paymentCircuitBreaker_fallback(@PathVariable(“id”) Integer id) //熔断后降级方法

{

return "id 不能负数,请稍后再试,/(ㄒoㄒ)/~~ id: " +id;

}

效果: 当连续使用 -100 请求时, 返回 “id 不能负数”, 使用100请求也返回 “id 不能负数” ,继续连续使用 100请求, 服务慢慢恢复

服务限流

使用 springcloud 阿里巴巴 sentinel 替代

Gateway 网关


Gateway

Gateway 项目配置
  1. 添加maven依赖

org.springframework.cloud

spring-cloud-starter-gateway

  1. 移除以下依赖

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

  1. yml 配置 (后续移步配置中心)

spring:

application:

name: cloud-gateaway-gateaway

cloud:

gateway:

discovery:

locator:

enabled: true

routes:

  • id: payment_get

uri: http://127.0.0.1:8001 #单一节点

uri : lb://CLOUD-PAYMENT-SERVICE /#启用 注册中心集群

predicates:

  • Path=/payment/get/**
  1. 注册进 Eureka 注册中心
Gateway 动态路由
  1. 开启 网关发现注册中心服务

spring:

application:

name: cloud-gateaway-gateaway

cloud:

gateway:

discovery:

locator:

enabled: true

Gateway 断言

断言是判断转发请求的条件

predicates:

  • After=2020-02-21T15:51:37.485+08:00[Asia/Shanghai]
  1. After,Before,Between 配置转发生效时间

public static void main(String[] args) {

ZonedDateTime now = ZonedDateTime.now();

System.out.println(now);

}

// 2020-08-24T14:23:57.171+08:00[Asia/Shanghai]

  1. Cookie 请求需携带指定Cookie才可以访问

predicates:

  • Cookie=name,ytooo # key,value
  1. Header ≈ Cookie

predicates:

  • Header=name,ytooo # key,value
Gateway 过滤器
  1. (默认过滤器) 官方提供一系列过滤器,供我们 在请求转发之前,对请求进行加工处理

filters:

  • AddRequestParamter=rowid,1024
  1. 自定义过滤器

自定义全局过滤器

@Component

@Slf4j

public class GatewayLogFilter implements GlobalFilter, Ordered {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

log.info(“=进入全局过滤器=”);

String name = exchange.getRequest().getQueryParams().getFirst(“name”);

if (null == name) {

exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);

return exchange.getResponse().setComplete();

}

return chain.filter(exchange);

}

@Override

public int getOrder() {

return 0;

}

}

SpringCloud Config 分布式配置中心, BUS 消息总线


分布式配置中心 SpringCloud Config

服务端配置
  1. 建立git仓库 https://github.com/sunshinelyz/cloud-config

  2. 引入 maven

org.springframework.cloud

spring-cloud-config-server

3.启动类使配置生效

@SpringBootApplication

@EnableEurekaClient

@EnableConfigServer

public class ConfigMain3344 {

public static void main(String[] args) {

SpringApplication.run(ConfigMain3344.class, args);

}

}

  1. 配置 配置文件

spring:

application:

name: cloud-config-center

cloud:

config:

server:

git:

uri: https://github.com/sunshinelyz/cloud-config

search-paths:

  • cloud-config

label: master

  1. 请求访问 : http://127.0.0.1:3344/master/config-dev.yml
客户端配置
  1. 引入 maven

org.springframework.cloud

spring-cloud-config-client

  1. 配置 配置文件

spring:

application:

name: cloud-condig-client

cloud:

config:

label: master # 分支

name: config # 配置文件名称

profile: dev # 版本

uri: http://127.0.0.1:3344 # config服务端地址

手动刷新客户端配置

不建议使用

消息总线 Bus

设计逻辑

使用消息总线触发服务端的 bus/refresh 端点,刷新所有客户端config配置

初始条件

客户端,服务端都需要实现Springcloud Config功能

服务端配置
  1. 引入maven依赖

org.springframework.cloud

spring-cloud-starter-bus-amqp

  1. 配置文件中配置消息队列信息

配置消息队列

rabbitmq:

host: 192.168.10.58

port: 5672

username: ytooo

password: ytooo

  1. 配置文件中配置BUS总线暴露信息

配置bus暴露端点

management:

endpoints:

web:

exposure:

include: “bus-refresh”

  1. 配置文件预览

server:

port: 3344

spring:

application:

name: cloud-config-center

cloud:

config:

server:

git:

uri: https://github.com/sunshinelyz/cloud-config

search-paths:

  • cloud-config

label: master

配置消息队列

rabbitmq:

host: 192.168.10.58

port: 5672

username: ytooo

password: ytooo

eureka:

instance:

prefer-ip-address: true

instance-id: cloud-config-center-3344

client:

fetch-registry: true

register-with-eureka: true

service-url:

defaultZone: http://eureka7001.com:7001/eureka/ #,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

配置bus暴露端点

management:

endpoints:

web:

exposure:

include: “bus-refresh”

客户端配置
  1. 引入maven依赖

org.springframework.cloud

spring-cloud-starter-bus-amqp

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

ytooo

eureka:

instance:

prefer-ip-address: true

instance-id: cloud-config-center-3344

client:

fetch-registry: true

register-with-eureka: true

service-url:

defaultZone: http://eureka7001.com:7001/eureka/ #,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

配置bus暴露端点

management:

endpoints:

web:

exposure:

include: “bus-refresh”

客户端配置
  1. 引入maven依赖

org.springframework.cloud

spring-cloud-starter-bus-amqp

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-Vs8tNq3J-1710936254928)]
[外链图片转存中…(img-c61AnnuK-1710936254929)]
[外链图片转存中…(img-wALhji00-1710936254929)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-2iPrkQOz-1710936254930)]

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值