Spring Cloud微服务接口调用流程

首先编写客户端,关键在于@FeignClient(“被调用端的服务名”).然后编写需要调用的接口地址.这样就可以通过服务名+接口地址定位到对应的方法

@FeignClient("service-vod")
@Component
public interface VodClient {
    @DeleteMapping(value = "/eduvod/video/{videoId}")
    public R removeVideo(@PathVariable("videoId") String videoId);

    @DeleteMapping(value = "/eduvod/video/delete-batch")
    public R removeVideoList(@RequestParam("videoIdList") List<String> videoIdList);
}

第一步:调用端(消费者)接口请求发出.通过Feign,指向被调用端(生产者)对应的方法.
例:VodClient及连接生产者和消费者的类.先将VodClient注入进ServiceImpl,然后调用VODClient中的方法,VodClient中的@FeignClient就会通过Feign连接到对应的生产者中的方法.

	@Autowired
    private VodClient vodClient;
    @Override
    public boolean removeByCourseId(String courseId) {
        //根据课程id查询出对应的视频id
        QueryWrapper<EduVideo> wrapper=new QueryWrapper<>();
        wrapper.eq("course_id",courseId);
        wrapper.select("video_source_id");
        List<EduVideo> list=baseMapper.selectList(wrapper);
        //得到所有列表的云端视频id
        List<String> idList=new ArrayList<>();
        for (EduVideo edu:list) {
            if (!StringUtils.isEmpty(edu.getVideoSourceId())){
                idList.add(edu.getVideoSourceId());
            }
        }
        //调用vod服务删除远程视频
        if (idList.size()>0){
            vodClient.removeVideoList(idList);
        }
        QueryWrapper<EduVideo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("course_id", courseId);
        Integer count = baseMapper.delete(queryWrapper);
        return null != count && count > 0;
    }

第二步:通过Feign后,会执行熔断器Hystrix.熔断器的作用就是,在消费者调用生产者之前,Hystrix会先尝试连接生产者,如果这时发现生产者不在线(服务挂掉了),就会进行熔断,终止调用.
第三步:如果生产者在线,那么流程就会走到负载均衡(Ribbon).负载均衡的意义在于,当生产者被做成一个集群时(有多台服务器运行同一个生产者),这时候Ribbon就会根据各服务器的运行情况和开发人员设置的负载规则,将请求分发到对应的服务器.
第四步:前几步都通过之后,请求才会进入被调用的生产者,通过ip端口号接口地址访问到对应的方法进行调用.这个流程被称为httpClient.

Feign

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

Hystrix

Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。下图表示服务B触发了断路器,阻止了级联失败

Spring Cloud微服务接口调用流程_第1张图片

你可能感兴趣的:(spring,java,spring,cloud)