Spring Cloud入门级使用

在Spring boot项目中使用Spring cloud组件,首先要明白当前自己用的Spring boot对应的Spring cloud版本是什么。

参考 https://spring.io/projects/spring-cloud Release Trains 部分。一定要将注意版本问题,最好匹配下版本,不然容易出现意外的错误。

Spring Cloud入门级使用_第1张图片

我的项目是基于spring boot 2.0.1.RELEASE的,所以以下dependence都是基于这个spring boot版本的。

首先spring cloud版本对应的使用:

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloudgroupId>
				<artifactId>spring-cloud-dependenciesartifactId>
				<version>Finchley.SR2version>
				<type>pomtype>
				<scope>importscope>
			dependency>
		dependencies>
	dependencyManagement>
  1. Eureka

    服务注册中心

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    dependency>
    

    服务客户端

    <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    

    应用主类添加注解@EnableDiscoveryClient

    在Spring cloud Dalston版本前netflix下的项目在pom文件中的artifactId基本是

    spring-cloud-starter-eureka-server,在Spring cloud F版本之后基本上是:

    spring-cloud-starter-netflix-eureka-client

    名称加上了netflix。

  2. Ribbon

    负载均衡

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
    dependency>
    
  3. Feign

    Feign使得编写java http客户端变得更容易 https://github.com/OpenFeign/feign

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-openfeignartifactId>
    dependency>
    

    应用主类添加注解

    @EnableFeignClients
    

    示例:

    // 客户端名称
    @FeignClient("risk-management")
    public interface RiskManagementClient {
        // controller中对外接口名称
        @RequestMapping(value = "valid", method = RequestMethod.GET)
        String valid();
    }
    
    //具体使用
    @Autowired
    RiskManagementClient riskManagementClient;
    
    @RequestMapping(value = "/consumer", method = RequestMethod.GET)
    public ResponseEntity<Object> valid() {
        String msg = riskManagementClient.valid();
        return Response.success(msg);
    }
    

    使用Feign可以让通过Http调用远程接口的方式像调用接口一样轻松,Feign本身就有"假装,伪装"的意思,意思是使用Feign就像使用接口一样吧。

  4. Hystrix

    Hystrix是一个延迟和容错库,旨在隔离对远程系统,服务和第三方库的访问点,停止级联故障,并在复杂的分布式系统中实现弹性,在这些系统中,故障是不可避免的。

    https://github.com/Netflix/Hystrix

    应用主类中添加注解,开启Hystrix

    @EnableCircuitBreaker
    
    
    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix
    
    

    新增一个service

    @Service
    public class RiskManagementService {
    
        @Autowired
        RiskManagementClient riskManagementClient;
    
        @HystrixCommand(fallbackMethod = "fallback")
        public String valid(OrderRBO orderRBO) {
            String msg = riskManagementClient.valid(orderRBO);
            return msg;
        }
    
        public String fallback(OrderRBO orderRBO) {
            return "银行服务升级中,暂不可用!";
        }
    }
    ```
    
    前端controller中现在调用这个Service
    
    ``````java
    @Autowired
    RiskManagementService riskManagementService;
    
    @RequestMapping(value = "/consumer", method = RequestMethod.POST)
    public ResponseEntity<Object> valid(@RequestBody OrderRBO orderRBO) {
        String msg = riskManagementService.valid(orderRBO);
        return Response.success(msg);
    }
    

    最终的应用主类如下:

    @EnableFeignClients
    @EnableDiscoveryClient
    @SpringBootApplication
    @EnableCircuitBreaker
    public class BankServiceApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(BankServiceApplication.class, args);
    	}
    
    	@Bean
    	@LoadBalanced
    	public RestTemplate getRestTemplate() {
    		return new RestTemplate();
    	}
    }
    
    

    当服务提供方出现异常,没有正常返回时,valid接口回返回“银行服务升级中,暂不可用”。

    如果出现:

    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ribbon?

    检查是否缺少以上几个包的引用。

你可能感兴趣的:(springboot,Spring,Cloud,Netflix)