绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
java SpringCloud分布式微服务b2b2c电子商务-Spring Cloud Feign 搭建
2020-03-13 13:48:48

Spring Cloud Feign 概述 了解springcloud架构可以加求求:三五三六二四七二五九

Spring Cloud Feign 基于Netflix Feign 整合了Spring Cloud Ribbon与Spring Cloud Hystrix,还提供了一种声明式的web服务客户端的定义方式,具备可插拔的注解,包括Feign注解和JAX-RS注解,还支持可插拔的HTTP编码器与解码器.

Spring Cloud Feign 搭建

  • pom
  • <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    Application类上 

  • @EnableDiscoveryClient
    @EnableFeignClients // 开启Feign

    自定义Controller  

  • @RestController
    public class ConsumerController {
    @Autowired
    private FeignClient feignClient;

    @GetMapping("/{id}")
    public String findById(@PathVariable Long id) {
    return this.feignClient.findById(id);
    }
    }

    基本

    • yml
    • server:
      port: 8010
      spring:
      application:
      name: consumer-service
      eureka:
      client:
      serviceUrl:
      defaultZone: http://localhost:8761/eureka/
      instance:
      prefer-ip-address: true

       单个参数请求

    • 制定Feign接口
    • @FeignClient(name = "provider-service")  //声明需要调用的服务提供者的名称
      public interface FeignClient {

      /**
      * 与提供者在Controller定义的一样请求方式和请求路径
      * 通过编写"翻译器"(Contract),可以让Feign知道第三方注解的含义
      * 同样,SpringCloud也提供了翻译器,会将注解告诉Feign,因此,接口可以直接使用该注解
      * 默认支持注解:@RequestMapping、@RequestParam、@RequestHeader、@PathVariable
      */
      @RequestMapping(value = "/provider/{id}", method = RequestMethod.GET)
      public String findById(@PathVariable("id") Long id);
      }

      多参数请求

      • 自定义Feign接口
        使用Feign构造多参数请求:1.使用post传递对象;2.get在参数列表上分别一个一个,隔开的传输;3.get 传递map
      • @FeignClient(name = "provider-service")
        public interface UserFeignClient {

        //该请求不会成功
        @RequestMapping(value = "/provider/get", method = RequestMethod.GET)
        public User get(User user);

        @RequestMapping(value = "/provider/get", method = RequestMethod.GET)
        public User get1(@RequestParam("id") Long id, @RequestParam("username") String username);

        @RequestMapping(value = "/provider/get", method = RequestMethod.GET)
        public User get2(@RequestParam Map<String, Object> map);

        @RequestMapping(value = "/provider/post", method = RequestMethod.POST)
        public User post(@RequestBody User user);
        }

        使用Feign注解

        • yml
        • server:
          port: 8010
          spring:
          application:
          name: consumer-service
          eureka:
          client:
          serviceUrl:
          defaultZone: http://localhost:8761/eureka/
          instance:
          prefer-ip-address: true

          自定义配置类 

        • /**
          * 该类为Feign的配置类
          * 注意:该不应该在主应用程序上下文的@ComponentScan
          */
          @Configuration
          public class FeignConfiguration {
          /**
          * 将契约改为feign原生的默认契约。这样就可以使用feign自带的注解了。
          * @return 默认的feign契约
          */
          @Bean
          public Contract feignContract() {
          return new feign.Contract.Default();
          }
          }

          制定Feign接口 

        • /**
          * 使用@FeignClient的configuration属性,指定feign的配置类。
          */
          @FeignClient(name = "provider-service",configuration = FeignConfiguration.class)
          public interface FeignClient {

          /**
          * 使用feign自带的注解@RequestLine
          */
          @RequestLine("GET /provider/{id}")
          public String findById(@Param("id") Long id);

          }

          Feign日志配置

          • 自定义配置类
          • @Configuration
            public class FeignLogConfiguration {
            @Bean
            Logger.Level feignLoggerLevel() {
            return Logger.Level.BASIC;
            }
            }

            制定Feign接口 

          • /**
            * 使用@FeignClient的configuration属性,指定feign的配置类。
            */
            @FeignClient(name = "provider-service",configuration = FeignLogConfiguration.class)
            public interface FeignClient {

            /**
            * 使用feign自带的注解@RequestLine
            */
            @RequestMapping(value = "/provider/{id}", method = RequestMethod.GET)
            public String findById(@PathVariable("id") Long id);

            }


            yml

          • server:
            port: 8010
            spring:
            application:
            name: consumer-service
            eureka:
            client:
            serviceUrl:
            defaultZone: http://localhost:8761/eureka/
            instance:
            prefer-ip-address: true
            logging:
            level:
            com.amor.cloud.feign.FeignClient: DEBUG # 将Feign接口的日志级别设置成DEBUG,因为Feign的Logger.Level只对DEBUG作出响应。


             Feign压缩配置

            feign.compression.request.enabled:设置为true开启请求压缩
            feign.compression.response.enabled:设置为true开启响应压缩
            feign.compression.request.mine-*:数据类型列表,默认为text/xml,application/xml,application/json
            feign.compression.request.min-request-size:设置请求内容的小阀值,默认2048


分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据架构
创建时间:2020-05-20 11:23:41
有关数据架构的小栈里面全都有
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~