• Feign的基本使用


    我使用的SpringCloud版本为Hoxton.SR3

    服务消费方使用

    第一步:引入Feign依赖  

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

    第二步:启用Feign,在启动类添加开启的注解

    package com.company;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.SpringCloudApplication;
    import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.netflix.ribbon.RibbonClient;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    //@EnableDiscoveryClient //启用Eureka客户端
    //@SpringBootApplication
    //@EnableCircuitBreaker //启用Hystrix熔断功能
    @SpringCloudApplication //替代以上三个注解
    @EnableFeignClients //启用Feign
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class);
        }
    
        //启用Feign以后无需再注入
    //    @Bean
    //    @LoadBalanced
    //    public RestTemplate restTemplate(){
    //        return new RestTemplate();
    //    }
    }

    第三步:写一个Feign的客户端

    package com.company.client;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    
    @FeignClient("user-service")//声明这是一个Feign的客户端接口,value指明服务id
    public interface UserFeignClient {
        //使用SpringMVC的注解指明请求方式、请求路径、请求参数和响应类型
        @GetMapping("/user/{id}")
        public String getUserById(@PathVariable(name = "id") Long id);
    }

    第四步:改造消费方的调用方式

    package com.company.controller;
    
    import com.company.client.UserFeignClient;
    import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    @RequestMapping("/consumer3")//Feign
    @Slf4j
    @DefaultProperties(defaultFallback = "getUserByIdFallBack")
    public class ConsumerController3 {
    
        @Autowired
        private UserFeignClient feignClient;
    
        @GetMapping("/{id}")
        @HystrixCommand
        public String getUserById(@PathVariable("id")Long id){
            long start=System.currentTimeMillis();
            String user = feignClient.getUserById(id);
            long end=System.currentTimeMillis();
            log.debug("调用时长:{}",end-start);
            return user;
        }
    
        public String getUserByIdFallBack(){
            return "很抱歉,服务器3正忙,请稍后再试。";
        }
    
    }

    熔断依旧可用。

    Feign内部已经使用了Ribbon的负载均衡

  • 相关阅读:
    通过通过url routing解决UIViewController跳转依赖
    vs2010下配置CUDA出现kernel launch failed问题,内核无效
    ganglia监控自己定义metric实践
    faq
    Android进阶图片处理之三级缓存方案
    操作系统 内存管理(一)
    rocketmq消费队列代码
    网页固定側栏的做法
    web爬虫之登录google paly 商店
    C之内存地址
  • 原文地址:https://www.cnblogs.com/zou-rong/p/12597464.html
Copyright © 2020-2023  润新知