暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过Open-Feign调用其他微服务实现解耦

1332

说明:

    使用feign整合nacos实现微服务间的远程调用,相比于之前的restTemplate的方式,更加的解耦,可以通过单独抽取出其他微服务的FeignClient作为service层的业务逻辑,然后通过注解注入当前微服务的其他方法中(如controller,service等)使用。

什么是Open-Feign

    SpringCloud提供的伪http客户端(本质还是⽤http),封装了Http调⽤流程,更适合⾯向接⼝化编程;让⽤Java接⼝注解的⽅式调⽤Http请求.不⽤像Ribbon中通过封装HTTP请求报⽂的⽅式调⽤; Feign默认集成了Ribbon,即Feign默认有负载均衡策略;nacos默认支持feign远程调用。

1、引入feign依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    2、开启feign远程调用支持@EnableFeignClients

      @SpringBootApplication
      //开启服务发现(nacos注册中心)
      @EnableDiscoveryClient
      //开启Feign远程调用支持
      @EnableFeignClients


      public class OrderApplication {


      public static void main(String [] args){


      SpringApplication.run(OrderApplication.class,args);
      }


      }


      3、抽取出Service层的接口逻辑(业务核心)【伪http请求!!!!】

          注:当在现在的orderservice中调用这里面的方法时,feign会去nacos注册中心上找id=xdclass-video-service的微服务,然后通过发起http请求访问微服务的方法,而且feign默认集成了ribbon,因此feign本身就有负载均衡策略(基于客户端的负载均衡)

      类似于封装了一个远程调用的controller层

        /**
        * 调用VideoService中的方法findById的时候会自动拼装为xdclass-video-service/api/v1/video/find_by_id
        */
        //调用哪个微服务(如果是集群形式,那么会轮询的方式决定调用哪个服务)
        @FeignClient(value = "xdclass-video-service")
        public interface VideoService {


        @GetMapping("/api/v1/video/find_by_id")
        Video findById(@RequestParam("videoId") int videoId);


        @PostMapping("/api/v1/video/save")
        int save(@RequestBody Video video);


        }

        4、controller层通过注入VideoService实现远程调用

          @RestController
          @RequestMapping("api/v1/video_order")
          public class OrderController {


          @Autowired
          private VideoService videoService;


          @RequestMapping("find_by_id")
          public Object findById(int videoId){
          //通过open-feign调用视频微服务的方法
          Video video = videoService.findById(videoId);


          VideoOrder videoOrder = new VideoOrder();
          videoOrder.setVideoId(video.getId());
          videoOrder.setVideoTitle(video.getTitle());
          videoOrder.setCreateTime(new Date());
          videoOrder.setServerInfo(video.getServeInfo());
          return videoOrder;
          }


          @PostMapping("save")
          public int save(@RequestBody Video video){
          //通过open-feign调用视频微服务的方法
          videoService.save(video);
          return 1;
          }
          }


          vip课程是指同学们加入我们的vip学习群,vip群里面的小伙们可以永久参加所有的直播算法刷题课程,我每天直播的时间是早上8:30-9:30,通过腾讯会议在线讲解算法刷题,语言包括c++,java和golang版本,只要加入了vip群,除了每天的直播刷题外,前45位加入的同学,我会额外赠送我所有的学习实战资料,包括docker、git、java io、leetcode算法、java源码分析、jdk新特性、kafka、linux、mybatis、mybatis plus、mysql、mysql刷题、netty、nginx、python、rabbitmq、redis、sharding jdbc、spring、springboot、springcloud、并发编程、html+css、微信支付实战所有内容的学习笔记,总共800+张的文档资料。

          国庆前的推广活动:

          国庆前的价格:800元/人 

          国庆后恢复原价为1349元/人

          国庆前45位加入的同学,带大家看看我们赠送的学习文档【声明只有国庆前45位加入vip学习群的同学,才会赠送这些内容哈】,对于之前已经加入了其他课程的同学,联系我有额外的优惠,我们每天8:30-9:30上直播算法课程:

          链接详情

          vip课程是指同学们加入我们的vip学习群,vip群里面的小伙们可以永久参加所有的直播算法刷题课程,我每天直播的时间是早上8:30-9:30,通过腾讯会议在线讲解算法刷题,语言包括c++,java和golang版本,只要加入了vip群,除了每天的直播刷题外,前45位加入的同学,我会额外赠送我所有的学习实战资料。

          奔跑的小梁,公众号:梁霖编程工具库算法班永久vip直播教学刷题来啦




          文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论