zoukankan      html  css  js  c++  java
  • 微服务实战——SpringCloud与Feign集成

    上一篇集成了ZuulGateway和Eureka并进行了测试。在实际场景中,我们肯定会有很多的微服务,而他们之间可能会存在相互调用的关系,那么,如何优雅的处理服务之间的调用问题呢?接下来就是我们要解决的。

    简单的说下Feign

    Feign 是一个声明式REST Web服务客户端,可以处理微服务间的Web服务调用。他是使用注解加接口的形式形成去调用服务的,相对来说不是很难,有兴趣可去官方地址了解下。这里不多介绍。

    如何用

    这里我们还是基于之前的Spring cloud demo去改造,老规矩先附上源码地址spring cloud demo

    步骤
    1. 这里Consumer与Provider分别代表两个微服务,测试时,使用Controller通过Feign调用Provider。调用流程如下: 网关zuul -> consumer -> provider
    2. 引入依赖
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      
    3. 在Consumer的启动类上增加注解,开启Feign的支持
      @EnableFeignClients
      
    4. 在Consumer新增Controller以供测试时调用
       package cn.kxtop.blog.consumer.controller;
      
       import cn.kxtop.blog.consumer.client.ProviderClient;
       import lombok.extern.slf4j.Slf4j;
       import org.springframework.beans.factory.annotation.Autowired;
       import org.springframework.web.bind.annotation.GetMapping;
       import org.springframework.web.bind.annotation.PostMapping;
       import org.springframework.web.bind.annotation.RequestMapping;
       import org.springframework.web.bind.annotation.RestController;
      
       @Slf4j
       @RestController
       @RequestMapping("/feign")
       public class TestFeignController {
      
      
           @Autowired
           private ProviderClient providerClient;
      
      
           @GetMapping
           public String get() {
               log.info("consumer feign get action");
               return providerClient.get();
           }
      
           @PostMapping
           public String post() {
               log.info("consumer feign post action");
               return providerClient.post();
           }
      
       }
      
      
    5. 在Consumer定义Feingn接口
       package cn.kxtop.blog.consumer.client;
      
       import org.springframework.cloud.openfeign.FeignClient;
       import org.springframework.web.bind.annotation.GetMapping;
       import org.springframework.web.bind.annotation.PostMapping;
      
      
       @FeignClient(name = "kxtop-provider", path = "/api/test-feign")
       public interface ProviderClient {
      
           @GetMapping("/")
           String get();
      
           @PostMapping("/")
           String post();
      
       }
      
      
    6. 在Provider中新增REST接口,这里主要用于测试,供Consumer调用
       package cn.kxtop.blog.provider.controller;
      
       import lombok.extern.slf4j.Slf4j;
       import org.springframework.web.bind.annotation.GetMapping;
       import org.springframework.web.bind.annotation.PostMapping;
       import org.springframework.web.bind.annotation.RequestMapping;
       import org.springframework.web.bind.annotation.RestController;
      
       @Slf4j
       @RestController
       @RequestMapping("/test-feign")
       public class TestFeignController {
      
           @GetMapping
           public String get() {
               log.info("provider feign get action");
               return "test feign get";
           }
           @PostMapping
           public String post() {
               log.info("provider feign post action");
               return "test feign post";
           }
      
       }
      
      
    7. 使用Postman请求Consumer测试
      观察得知,Postman请求到网关之后分发到consumer微服务,微服务通过Feign接口调用Provider微服务并接收到返回值,之后原路返回到Consumer。当然,这里只是简单的演示下如何使用Feign,实际生产环境中,使用远不止这么简单,这就需要我们慢慢去摸索了...
      20200303165439
      20200303165525
      20200303165547

    最后

    到这里,我们的基本框架已经搭建完成,我们用SpringCloud集成了网关(Zuul),还加入了服务发现与注册(Eureka),也演示了微服务间的调用并集成了Feign。

    那么基于以上,我们会发现还是会有些场景没有解决。比如,我的配置都在properties里面,参数都是写死的,到线上后怎样在不重启服务的情况下修改参数?怎样进行灰度发布或金丝雀测试?还有我们的微服务已经通过Feign可以相互调用了,那我怎样监测他们的运行情况?如果出故障时,如何快速的知道并修复?数据量太大,一台扛不住又该如何?在SpringCloud中又如何处理分库分表读写分离?

    别急,后面我们都会讲到...

    持续学习,记录点滴。更多文章请访问 文章首发

  • 相关阅读:
    张硕组兽棋测试报告(整理——郑云飞)
    5.6任务进展情况(整理——郑云飞)
    5.5任务进展情况(整理——祁子梁)
    android-读取MediaProvider
    android-effect
    window下载android 最新源码
    android-mediaplayer播放
    android-基础编程-Notification
    android-基础编程-ViewPager
    android-glsurfaceview Activity框架程序
  • 原文地址:https://www.cnblogs.com/qupengkun/p/12607522.html
Copyright © 2011-2022 走看看