ps:Fegin和Ribbon 其实是差不多的东西,Fegin里面也是集成了Ribbon,不过咱们写代码不是要优雅嘛,使用Feign就会优雅很多了,看着比直接使用Ribbon舒坦一点

 就不重新构建项目了,实在懒得动手可以从git上把我的代码拉去跑一跑,保证能运行。

 1.首先在order_server里面引入对Fegin的依赖

  

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

 2.在启动类中增加注解@EnableFeginClients

  

3.可以开始编写咱们的Fegin代码了

package net.xdclass.order_server.service;

import net.xdclass.order_server.fallback.ProductClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; /**
* @date 2021/6/2 23:30
*/
//写上服务提供方的服务名称
@FeignClient(value = "product-service")
public interface ProductClient {
  //请注意,参数与被调用方实际接口一致
@GetMapping("/api/v1/product/findById")
String findById(@RequestParam("id")int id); }

4.然后在需要调用接口的地方,注入这个Bean,ProductClient 再调用方法。

@Autowired
private ProductClient productClient;

5.然后调用方法获取返回值

6.设置负载均衡策略,在配置文件中增加以下配置,下面将默认的轮询机制变更为随机机制

product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

7.fegin内置了hystrix,使用方式如下

feign:
hystrix:
#开启熔断器
enabled: true
client:
config:
default:
#连接超时时间
connectTimeout: 2000
#返回超时时间
readTimeout: 11000

8.加上fallback = ProductClientFallback.class

package net.xdclass.order_server.service;

import net.xdclass.order_server.fallback.ProductClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; /**
* @author chengcheng123
* @date 2021/6/2 23:30
*/
@FeignClient(value = "product-service",fallback = ProductClientFallback.class)
public interface ProductClient { @GetMapping("/api/v1/product/findById")
String findById(@RequestParam("id")int id); }

9.编写ProductClientFallback,继承使用fegin的productClient,然后将这个类用@component 标识为组件,交由IOC管理

/**
* @date 2021/6/3 23:33
*/
@Component
public class ProductClientFallback implements ProductClient {
@Override
public String findById(int id) {
System.out.println("feign 调用product-service findById 异常");
return null;
}
}

10.完事,自己验证一下

使用idea从零编写SpringCloud项目-Feign的更多相关文章

  1. 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目

    前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...

  2. 从零搭建一个SpringCloud项目之Feign搭建

    从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...

  3. SpringCloud——Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录

    SpringCloud--Eureka Feign Ribbon Hystrix Zuul等关键组件的学习与记录 前言:本篇是对近日学习狂神SpringCloud教程之后的感想和总结,鉴于对Sprin ...

  4. CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL

    CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL +BIT祝威+悄悄在此留下版了个权的信息说: 开始 本文用step by step的方式,讲述如何使 ...

  5. SpringCloud 在Feign上使用Hystrix(断路由)

    SpringCloud  在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...

  6. SpringCloud(5)---Feign服务调用

    SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具 ...

  7. idea创建springcloud项目图文教程(EurekaServer注册中心)

    http://blog.csdn.net/hcmony/article/details/77854999 idea创建springcloud项目图文教程(EurekaServer注册中心)(六) 1, ...

  8. SpringCloud使用Feign出现java.lang.ClassNotFoundException: org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory异常

    废话不多说!!! 在SpringCloud项目中配置了Feign来调用restful接口,项目启动的时候报错,报错信息如下: 找不到org.springframework.cloud.client.l ...

  9. springcloud 之 feign的重复性调用 优化

    最近有一个springcloud的feign请求,用于获取坐标经纬度的信息,返回结果永远是固定不变的,所以考虑优化一下,不然每次转换几个坐标都要去请求feign,返回的所有坐标信息,数据量太大导致耗时 ...

  10. SpringCloud之Feign负载均衡(四)

    整合Feign pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <arti ...

随机推荐

  1. WEB的安全性测试要素【转】

    原文链接:http://www.cnblogs.com/zgqys1980/archive/2009/05/13/1455710.html WEB的安全性测试要素 1.SQL Injection(SQ ...

  2. Python 元组tuple、 列表list、 字典dict、集合set、迭代器、生成器

    一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...

  3. AD笔记总结

    原理图要点: 1.新建工程, 新建的project是要以后缀PrjPCB2.新建原理图.PCB, 右键project,进行New添加3.新建原理图库.PCB库,右键project, 进行new添加 改 ...

  4. uni-app使用阿里巴巴图标库icon详细步骤--避免踩坑

    踩了很多坑~~  最终终于找到可以使用阿里图标库的方法  简单方便 阿里巴巴图标库:https://www.iconfont.cn/home/index?spm=a313x.7781069.19989 ...

  5. JavaScript垃圾回收机制的了解

    对于js种的任意长度字符串,对象,数组是没有固定大小的,只有在分配存储时,解释器就会分配内存来存储这些数据.当js的解释器消耗完系统所有可用内存时,就会造成系统崩溃.因此js有着自己的一套垃圾回收机制 ...

  6. 杭电oj 蟠桃记

    Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少 ...

  7. 解决windows的mysql无法启动 服务没有报告任何错误的经验。

    解决windows的mysql无法启动 服务没有报告任何错误的经验. 相信很多人都遇到过安装Mysql的时候出现各种各样的问题,教大家解决window下mysql服务没有报告任何错误的情况下无法启动 ...

  8. vue解决点击事件冒泡 .stop

    vue解决点击事件冒泡  .stop <div @click="toCourse()" > <van-button type="primary" ...

  9. php excel导出列超过26个字母处理

    /** * String from columnindex * * @param int $pColumnIndex Column index (base 0 !!!) * @return strin ...

  10. redis分布式锁实现,setnx,nodejs版本

    const redis = require('ioredis'); const clienId = Math.random() * 100; //模拟客户端Id const lockKey = 'te ...