cccreator / Java

Accumulation And Mark
0 stars 0 forks source link

Spring Cloud #18

Open cccreator opened 5 years ago

cccreator commented 5 years ago

Spring Cloud

Spring Cloud 用于分布式开发,它基于Spring Boot提供了配置管理、服务发现、断路器、代理服务等解决方案。

  1. 服务配置:Spring Cloud提供了注解@EnableConfigServer来启用配置服务。

  2. 服务发现:Spring Cloud通过Erueka来实现服务发现,服务发现的主要目的是为了让每个服务之间可以相互通信。Eureka Server为微服务注册中心。Spring Cloud用@EnableEurekaServer@EnableEurekaClient提供Eureka服务端和客户端的支持。

  3. 路由网关:路由网关的主要目的是让所有的微服务对外只有一个接口,我们只需要访问一个网关地址,即可由网关将我们的请求代理到不同的服务中。Spring Cloud是通过Zuul来实现路由网关的,支持自动路由映射到Eureka Server上注册的服务。Spring Cloud通过注解@EnableZuulProxy来启用路由代理。

  4. 负载均衡:Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡。在Spring Cloud下,使用Ribbon直接注入一个RestTemplate对象即可,这个RestTemplate已经做好了负载均衡的配置;而使用Feign只需要定义个注解,有@FeignClient 注解的接口,然后使用@RequestMapping注解在方法上映射远程的REST服务,这个方法也已经做好了负载均衡点的配置。

  5. 断路器:主要是为了解决当某个方法调用失败的时候,调用后备方法来代替失败的方法,以此达到容错、阻止级联错误等功能。Spring Cloud使用@EnableCircuitBreaker来启用断路器的支持,使用@HystrixCommandfallbackMethod来指定后备方法。

cccreator commented 5 years ago

Spring Cloud使用举例

  1. @EnableConfigServer开启配置服务
    
    package com.springcloud;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication @EnableConfigServer public class Config_3344_StartSpringCloudApp { public static void main(String[] args) { SpringApplication.run(Config_3344_StartSpringCloudApp.class, args); } }


2. @EnableEurekaServer开启Eureka服务端的支持

package com.springcloud;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication @EnableEurekaServer // EurekaServer服务器端启动类,接受其它微服务注册进来 public class EurekaServer7001_App { public static void main(String[] args) { SpringApplication.run(EurekaServer7001_App.class, args); } }


3. 通过@EnableFeignClients开启对feign客户端的支持;通过@EnableCircuitBreaker开启断路器的支持;通过@EnableZuulProxy开启路由网关代理的支持;

@SpringBootApplication @EnableEurekaClient @EnableFeignClients @EnableCircuitBreaker @EnableZuulProxy public class UiApplication{ public static void main(String[] args){ SpringApplication.run(UiApplication.class,args); } }


4. @FeignClient 配置负载均衡

@FeignClient("person") public interface PersonService{ @RequestMapping(method = RequestMethod.POST, value = "/save", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody List save(@RequestBody String name); }


5. 通过`@HystrixCommand`使用断路器功能

@Service public class PersonHystrixService{ @Autowired PersonService personService; @HystrixCommand(fallbackMethod = "fallbackSave") public List save(String name){ return personService.save(name); }

public List<Person> fallbackSave(){
    List<Person> list = new ArrayList<>();
    Person p = new Person("Person Service 故障");
    list.add(p);
    return list;
}

}