Spring Cloud入门级使用

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

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

在这里插入图片描述

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

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

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.SR2</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
  1. Eureka

    服务注册中心

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    

    服务客户端

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </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.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
    
  3. Feign

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </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
    
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    

    新增一个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?

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

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值