SpringCloud主要应用于微服务方向,来缓解服务器的压力,从而带来更方便的用户体验。通过这段时间的学习,我基本上可以熟练应用spring cloud进行一些简单的开发工作,下面就是我这段时间的学习心得: 1.eureka eureka是微服务的根本,微服务的搭建都是在eureka的基础上的。各项服务将自身注册到eureka上来实现调用者的服务的共享。 其中eureka使用到的注解分为三个基本方面: 1.eureka服务器端 使用@EnableEurekaServer来表明当前的类为eureka服务器,其中的application.yml配置文件需要提供eureka的名称、端口号、是否将自己注册到注册中心(register-with-eureka)、是否自动拉取服务(fetch-register)等基本信息 使用到的maven依赖为
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.eureka服务提供端 使用@EnableDiscoveryClient注解开启客户端发现功能,并在配置文件中将自身端口号、名称以及eureka服务器端配置完成即可,即eureka: client: service-url: defaultZone: eurekServer的服务地址 使用到的maven依赖为:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.eureka服务使用端 使用@EnableDiscoveryClient注解开启客户端发现功能,并在配置文件中将自身端口号、名称以及eureka服务器端配置完成即可,即eureka: client: service-url: defaultZone: eurekServer的服务地址 使用到的maven依赖为:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.ribbon负载均衡 在使用多个相同服务时,为了避免有些服务频繁被访问而其余服务空闲的情况,我们可以使用ribbon来进行服务的负载均衡。 ribbon负载均衡可以在RestTemplate的配置方法上添加@LoadBalance注解。其中RestTemplate配置方法是用来获取服务名称、端口号等信息来实现eureka服务的调用的。而添加@LoadBalance注解就可以不再指定端口号,直接使用服务名称即可完成服务的调用。 ribbon负载均衡算法使用的是简单的轮询算法,即每个端口循环使用,我们也可以在配置文件中更改{服务名称}: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule 来进行算法的调节。 3.Hystrix服务降级 服务降级是为了防止服务器在大量访问时,因为某一个小的步骤出现差错导致服务整体无法进行。所以我们需要采取方法来对服务进行降级来确保服务的正常进行,至少给用户看到一个错误的结果。 使用Hystrix开启服务熔断需要使用@EnableCircuitBreaker注解来开启服务降级。其中,spring提供了一个集成三个注解的一个更为简洁的组合注解:@SpringCloudApplication,@SpringCloudApplication包含了@SpringBootApplication、@EnableDiscoveryClient和@EnableCircuitBreaker三个注解。我们在编写服务降级时需要在被降级的方法上添加@HystrixCommand注解,调用其中的fallbackMethod属性来指派降级后的方法。其中降级方法的参数和返回值必须和被降级方法保持一致。 当我们需要在某一个类上添加降级服务时,可以使用@DefaultProperties注解中的defaultFallback属性来指定默认的降级方法,就可以在当前类的方法降级后统一执行该降级方法。 为了规定超时时长,我们可以在配置文件中添加hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 时长(单位:ms) 来规定服务请求后等待的时长,默认时长为1s。其余的熔断配置如下hystrix: command: default:circuitBreaker: errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50% sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒 requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20 使用到的maven依赖为:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
4.Feign Feign可以极大简化我们的代码,并且Feign还集成了负载均衡、服务降级等多种常用功能,方便我们进行开发。 Feign首先是简化了服务的调用:我们需要编写Feign的客户端,其中用到的注解有@FeignClient(“{代理服务的名称}”),并完成接口的编写,接口中需要写出需要代理的方法,以及相应的@GetMapping,之后再完成相关controller的编写即可。在主类中我们需要添加@EnableFeignClient注解用来开启Feign功能。因为Feign集成了Ribbon,所以无需我们进行负载均衡的相关设置。 当然我们也可以在配置文件中使用ribbon: ReadTimeout: 2000 # 读取超时时长 ConnectTimeout: 1000 # 建立链接的超时时长 来进行相关配置的修改。 Feign对Hystrix的支持:默认情况下是关闭的,我们需要在配置文件中设置feign: hystrix: enabled: true # 开启Feign的熔断功能 来打开Hystrix,开启服务降级。但是在Feign中我们需要编写一个降级类来实现服务降级,而不是某个单独的方法。我们编写的降级类需要使用@Compoent将权限交给spring来管理,降级类需要实现Feign接口。编写完成后需要在Feign接口中的@FeignClient注解中调用fallback属性来指定刚才编写的降级类。
|