关于Spring Cloud

先附上以前做的一个面试总结:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
这是当时初学Spring Cloud时做的一个总结,因为是初学,所以很多知识点写的也很片面,甚至只是一句话做了个概括,这也导致在上家公司应用到项目中时遇到了很多问题,现在有时间,当然也是为了自己面试和以后工作方便翻阅,于是做一个比较深入的总结。
首先:在企业级开发中我们会用到Spring Cloud的那些组件?
其实用到那些完全是看工作的需要,Sprig Cloud的每一个组件,在工作中都能帮我们解决很多问题,简化我们的开发(屁话!)

下午也花了点时间自己自己搭了一个简单的架子:
在这里插入图片描述
基本上这些组件也够用了!
具体组件干什么用的上边的总结写的基本也有,这个Demo我参考的是官方的入门手册!
下面进入正题:
问题一:服务A需要访问服务B并获取服务B返回的数据怎么实现?
答:利用Feign(声明式客户端)

@FeignClient(value = ApplicationConstant.服务名, fallback = CouponServiceHystrux.class)
public interface CouponServiceClient {
    
    
    @GetMapping(value = "/coupon/getAllErpCoupon")
    ResultResp<Page<ErpCouponListDTO>> getAllCoupon(@RequestParam(value = "pageable") Pageable pageable);

   
    @GetMapping(value = "/coupon/{id}")
    ResultResp<CouponDTO> getOneCoupon(@RequestParam(value = "id") Long id);
}

这里介绍一下Feign的底层原理(新手勿喷!)
启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate
RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。
RequestTemplate生成Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
最后client封装成LoadBaLanceClient,结合ribbon负载均衡地发起调用。

RequestTemplate是一个远程HTTP调用工具,由Spring BOOT提供
方法:
getForObject(地址,参数,封装的对象类型)
postForObject(地址,参数,封装的对象类型)
类似于 HttpClient, Jsoup
在Ribbon中集成了RequextTemplate提供重试和负载均衡的功能。

还有就是Hystrix 降级和熔断了 ,feign中是集成了ribbon和Hystrix的,在开发中我们在使用时一般都是会写上的:

    @Override
    public ResultResp<Page<ErpCouponListDTO>> getAllCoupon(Pageable pageable) {
    
    
        return ResultResp.code(ResultCode.INTERNAL_SERVER_ERROR).build();
    }
``可以返回给前端一些错误信息,也可以返回null!
`

猜你喜欢

转载自blog.csdn.net/DoChengAoHan/article/details/103183314