Spring-cloud 远程调用工具feign

feign 

   可以对rest请求进行隐藏 伪装成 类似springMVC的Controller一样.  不用自己再拼接url, 拼接参数等操作

    1.feign依赖 包含 负载均衡依赖包 ribbon 所以不需要引入了

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    </dependencies>

2. 启动类   加注解 EnableFeignClients

@SpringCloudApplication //@SpringBootApplication @EnableDiscoveryClient@EnableCircuitBreaker  @EnableFeignClients
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }
}

3.另写一个 feign类客服端    告诉feign  要请求的服务的   请求方法  请求参数  返回值类型    和服务名user-server

@FeignClient("user-server")
public interface UserClient {

    @GetMapping("user/{id}")
    User findOne(@PathVariable("id")Integer id);
}

4.  Controller 类中 直接注入这个类  传入请求参数

     feign就会自动根据服务名user-server 去拉取列表  然后用 ribbon 获取一个实例   然后获得端口 和ip地址 拼接url 发起请求

@RestController
@RequestMapping("consumer")
@DefaultProperties(defaultFallback = "DefaulterrorFallback")
public class UserController {

    @Autowired
    private UserClient userClient;

    @GetMapping("/{id}")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })
    public User findOne(@PathVariable("id") Integer id) {
        User user = userClient.findOne(id);
        return user;
    }

    public User DefaulterrorFallback() {
        User user = new User();
        user.setName("错误");
        return user;
    }

 3.feign  的熔断机制  和超时时长  配置         feign默认 没有开启hystrix

   feign 真实超时 算法   (ReadTimeOut+ConnectionTimeOut) *2  倍数可以配置       为重试连接的配置

    这个值最好不要超过  hystrix 超时时长        因为 还没有重试连接就 已经熔断了

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
ribbon:
  ConnectiontimeOut: 500       建立连接超时时间 ms默认1000
  ReadtimeOut: 2000               读取数据时间  默认
feign:
  hystrix:
    enabled: true

 4.feign  的熔断 逻辑 业务必须 用一个实现类  

@FeignClient(value = "user-server",fallback =UserClientImpl.class )
public interface UserClient {

    @GetMapping("user/{id}")
    User findOne(@PathVariable("id")Integer id);
}

  5.实现类  

@Component
public class UserClientImpl implements UserClient {

    @Override
    public User findOne(Integer id) {
        User user = new User();
        user.setName("未知用户");
        return user;
    }
}

6.经过测试以前的 熔断机制也会执行 ,  但上面的如果存在 会覆盖  以前的方法  , 不能设置超时时间..........?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值