Eureka服务注册
注意:在主启动类上需要加上@EnableEurekaServer 才能使用eureka
spring.application.name=serverName
server.port=8761
#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
eureka.client.service-url.defaultZone=http://eureka2:8762/eureka
#eureka服务端的实例名称
eureka.instance.hostname=eureka1
#false表示不向注册中心注册自己。
eureka.client.register-with-eureka=true
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=true
#关闭自我保护机制
eureka.server.enable-self-preservation=false
#修改触发自我保护机制阈值(默认0.8)
eureka.server.renewal-percent-threshold=0.5
#使注册到eureka上是ip
eureka.instance.prefer-ip-address=true
Ribbon负载均衡
如果使用的是RestTemplate远程通信组件来进行远程通信,那么需要在其创建bean的上面加一个@LoadBalanBalanced注解,赋予它负载均衡的能力。
Feign远程通信
Feign需要先引入依赖,然后在主方法上添加@EnableFeignClients注解,最后创建一个接口类用于描述与远程服务通信的各种接口。
@FeignClient("serverName")
public interface FeignTestInterface{
@GetMapping("/get/hello")
public String getHello();
}
#打开请求过程中默认压缩
feign.compression.request.enabled=true
#进行压缩的临界值,低于此值不压缩
feign.compression.request.min-request=2048
#打开响应结果的默认压缩
feign.compression.response.enabled=true
#对所配置的静态资源进行压缩
feign.compression.request.mime-types=text/xml
Feign开启日志控制
//1、添加配置
现在application.properties文件添加如下配置(此配置需要在调用方配置)
logging.level.[com.lca.learn.consumer.FeignTestInterface]=debug
//2、创建一个与之相关的配置类,并将日志级别的bean声明注入到ICO容器中
public class FeignLogConfig{
@Bean
feign.Logger.Level feignLogger(){
/*
1、BASIC:只记录请求方法、url以及相应状态码和执行时间
2、FULL:所有信息都记录
3、HEADERS:除了BASIC以外的请求头和响应头信息
4、NONE:不记录任何日志
*/
return feign.Logger.Level.FULL;
}
}
//3、在自定义的feign接口注解中添加configuration属性指定新建的配置类
@FeignClient(name="serverName",configuration=FeignLogConfig.class)
public interface FeignTestInterface{}
改变Feign底层通信方法
//改变Feign底层通信方法(改变为OKHTTP)
//1、导入OKhttp依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign.okhttp</artifactId>
</dependency>
//2、添加配置
#关闭默认http通信方式
feign.httpclient.enabled=false
#启动okhttp通信方式
feign.okhtttp.enabled=true
OpenFeign使用Hystrix实现降级
//1、直接在注解里面设置fallback属性来制定一个降级类
@FeignClient(
name="serverName",
configuration=FeignLogConfig.class,
fallback = TestDefaultFallback.class)
//这个降级类需要实现当前接口类,并实现方法
//2、在application.properties文件中配置开启熔断
feign.hystrix.enabled=true
Spring Cloud Config配置中心
配置中心服务需要在主方法中添加@EnabledConfigServer注解
#指定配置中心对应仓库地址
spring.cloud.config.server.git.url=https://gitee.com/....
#指定对应用户名密码
spring.cloud.config.server.git.username=123456
spring.cloud.config.server.git.password=123456
想要使用配置中心的服务需要做如下配置:
//引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client<artifactId>
</dependency>
//需要在bootstrap.properties文件中添加配置
//bootstrap文件的加载优先级是高于application文件的
#启动配置的发现
spring.cloud.config.discovery.enabled=true
#eureka server上注册的的config server的服务名
spring.cloud.config.discovery.service-id=SPRING-CLOUD-CONFIG-SERVER
#指定配置文件类型
spring.cloud.config.profile=prd
#还需要指定eureka地址才能定位到config server
eureka.client.service-url.defaultZone=http://localhost:8762/eureka
当git上配置改变时,手动或自动通知服务方法:
1、手动通知服务更新配置
//1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator<artifactId>
</dependency>
//2.添加配置
#刷新refresh端点
management.endpoints.web.exposure.include=refresh
//3.在需要刷新的类头上加上注解例如下面
@RefreshScope
@Service
public class TestService{
@Value("${configInfo}")
private String configInfo;
}
//4.手动执行该服务的内置post方法
例如:http://localhost:8088/actuator/refresh
//4.1可以在git上设置钩子来自动触发更新操作如下图
2、自动更新服务配置
//1、config server和需要的服务 中新增依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator<artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka<artifactId>
</dependency>
//2、config server配置如下
spring.application.name=spring-cloud-config-server
server.port=8081
eureka.client.service-url.defaultZone=http://eureka2:8762/eureka
#指定配置中心对应仓库地址
spring.cloud.config.server.git.url=https://gitee.com/....
#指定对应用户名密码
spring.cloud.config.server.git.username=123456
spring.cloud.config.server.git.password=123456
#开启bus的支持
management.endpoints.web.exposure.include=bus-refresh
spring.cloud.bus.enabled=true
spring.cloud.bus.trace.enabled=true
spring.cloud.bus.refresh.enabled=true
#得到kafka支持
spring.kafka.bootstrap-servers=192.168.202.106:9092
spring.kafka.consumer.group-id=config-server
//在其他服务中心也需要加上上面kafka的信息以及依赖
//3、手动或自动调用post方式的api:http://localhost:8081/actuator/bus-refresh
Mybatis
mybatis-plus.mapper-locations = classpath:com/lca/**/*.xml
mybatis-plus.type-aliases-package = com.lca.**.domain
mybatis-plus.type-handlers-package = com.lca.persistence.typehandler,com.lca.**.typehandler
mybatis-plus.type-enums-package = com.lca.**.enums
mybatis-plus.configuration.jdbc-type-for-null = null
Spring Cloud Gateway
/**引入依赖*/
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client<artifactId>
</dependency>
spring:
application:
name: spring-cloud-gateway
cloud:
gateway:
routes:
## 断言:根据下面配置判断是否需要拦截,拦截的结果发送到uri映射的路径
- id: one_route
uri: http://localhost:8088/
predicates:
- Path=/gateway/**
## 请求参数name=lca的参数才会被拦截
- Query=name,lca
- Method=GET
filters:
## 表示将前缀去掉一个,否则拼接时会带着gateway
- StripPrefix=1
- id: two_route
uri: http://localhost:8088/
filters:
## 对于拦截到的请求header中加入参数key=name,value=xiaobai
- AddRequestParameter=name,xiaobai
- id: three_route
## 不通过地址,而是通过服务名称进行负载均衡调用
uri: lb://spring-cloud-server-name
predicates:
- Path=/gateway/**
##用来测试redis中key鉴权
filters:
- name: RequestRateLimiter
args:
# 自定义key
keyResolver: '#{@ipAddressKeyResolver}'
redis-rate-limiter.replenishRate: 1
redis-rate-limiter.burstCapacity: 2
discovery:
locator:
lower-case-service-id: true
enabled: true
redis:
host: redis的路径
Hystrix熔断机制
使用Hystrix实现降级
/**引入依赖*/
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix<artifactId>
</dependency>
方法一、在Controller方法上加@HystrixCommand注解,并设置降级方法
例如controller方法如下:
//@HystrixCommand注解只作用于方法之上
@HystrixCommand(fallbackMethod = "fallback")
@GetMapping("/hystrix/demo")
public String hystrixDemo(){
return restTemplate.getForObject("http://localhost:8088/test",String.class);
}
/**
* 注意方法名要与上面注解中设置的降级方法一致,并且返回值要与上面的返回值一致。
*/
public String fallback(){
return "系统繁忙,请稍后重试...";
}
方法二、在Controller类上设置@DefaultProperties(defaultFallback = "fallback")
设置请求超时时间
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})