唯能极于情,故能极于剑

有问题或错误请及时联系小编或关注小编公众号 "CodeCow",小编一定及时回复和改正,期待和大家一起学习交流

此文由四部分组成(OpenFeign简介、@FeignClient 使用、实操、总结),别着急,慢慢来

一、OpenFeign

1.1、OpenFeign 啥玩意 ?:

  • 官网:Feign 是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需 创建一个接口并在接口上添加注解 即可

1.2、OpenFeign 能干嘛 ? :

小编就不多 BB 先来张图 压压惊

这图不难理解:客服端调用服务端有两种方式 ribbon + restTemplate 或 Openfeign;
但是:在我们实际开发当中,往往 一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客服端类来包装这些依赖服务的调用 ;所以,OpenFeign在此基础上做了进一步封装,由他来帮助我们实现依赖服务接口的定义。
因此:需要我们做的非常简单,我们只需要创建一个接口并使用注解的方式来配置他,即可完成对服务提供方的接口绑定。

1.3、OpenFeign 怎么玩 ? :

来两个 好男人 必备网站, 哈哈

官网:cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign( 贼 慢。。。。)
GitHub:https://github.com/spring-cloud/spring-cloud-openfeign (还好,一般般)

二、OpenFeign 实操

了解OpenFeign 了,不来点 硬核 咋行呢,下面小编就结合实际开发和大家聊聊
注意:有服务端和客户端两个模块/项目

2.1、 :服务端 操作

①、首先导包
         <!--监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <!--Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--服务注册与发现 consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
②、改 YML 配置文件
server:
port: 8006 //端口号 spring:
application:
name: cloud-payment-service //服务名
cloud:
consul:
host: localhost //consul的IP
port: 8500 //consul启动端口默认8500
discovery:
service-name: ${spring.application.name}
prefer-ip-address: true //不写这个配置,在docker下的consul里面健康检查会失败
healthCheckInterval: 5s //健康检查频率
port: ${server.port} //注册服务所在端口
③、添加主启动类
@SpringBootApplication  // springboot 注解
@EnableDiscoveryClient //作用:能够让注册中心发现,并扫描到该服务
public class ProvideMain8006 { public static void main(String[] args) {
SpringApplication.run(ProvideMain8006.class, args);
}
}
④、业务逻辑Controller
@RestController
@Slf4j
public class PaymentController { @Resource
private PaymentService paymentService; @GetMapping("/payment/get/{id}")
public RespResult<Payment> getPaymentById(@PathVariable("id") Integer id) {
Payment payment = paymentService.getById(id); //getById 是serviceImpl中根据id 获取 payment 实体的方法, 小编在这就不赘述了
log.info("查询结果为:" + payment);
if (payment != null) {
return RespResult.success(payment); // RespResult 是小编自己封装的返回结果,不懂可以问小编
} else {
return new RespResult<>(444, "查询为空");
}
}
} 服务端就完事了:
自测:
url : http://localhost:8006/payment/get/1
结果 :{"code":200,"message":"成功","data":{"id":1,"desc":"98K"}}
解释 :Payment 实体就两个字段 id、desc, 通过结果可以知道 RespResult 是啥了吧 经过 小编一顿 SAO 操作, 服务端 还可以吧 ^ _ ^

2.1、 :客服端 / 消费端 操作

注意:消费端大体和客服端一样,注意细节 O ^ _ ^

①、首先导包
         <!--监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <!--Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--服务注册与发现 consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency> <!--服务调用 openFeign--> // 朋友:包其实就比服务端多一个 openFeign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
②、改 YML 配置文件
server:
port: 80 //端口号 浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了 spring:
application:
name: cloud-order-service //服务名
cloud:
consul:
host: localhost //consul的IP
port: 8500 //consul启动端口默认8500
discovery:
service-name: ${spring.application.name}
prefer-ip-address: true //不写这个配置,在docker下的consul里面健康检查会失败
healthCheckInterval: 5s //健康检查频率
port: ${server.port} //注册服务所在端口 ribbon: // 此配置和 OpenFeign 超时控制 有关, 小编在这就不多赘述了,有想了解,直接给小编留言
ReadTimeout: 5000 //请求处理的超时时间 5秒
ConnectTimeout: 3000 //请求连接的超时时间 3秒 logging: // 此配置和 OpenFeign 打印日志级别有关
level:
top.msxdlb.springcloud.service.OrderService: debug //日志打印级别
③、添加主启动类
@SpringBootApplication  // springboot 注解
@EnableDiscoveryClient //作用:能够让注册中心发现,并扫描到该服务
@EnableFeignClients //服务调用 注解
public class ConsumerMain80 { public static void main(String[] args) {
SpringApplication.run(ConsumerMain80.class);
}
}
④、业务逻辑 Service
/**
* 此类作用: 不懂看 最上面 OpenFeign 是啥玩意?
* OpenFeign 能干嘛?
*/
@Component
@FeignClient("cloud-payment-service") //里面是服务端的 服务名(yml 文件中)
public interface PaymentService{ @GetMapping("/payment/get/{id}")
public RespResult<Payment> getPaymentById(@PathVariable("id") Integer id);
④、业务逻辑 Controller
@RestController
@Slf4j
public class PaymentController {
/**
* 使用 Feign 方式调用
*/
@Resource
private PaymentService paymentService; // 注入 service 中 通过 @FeignClient 定义好的接口 @GetMapping("/feign/payment/get/{id}")
public RespResult<Payment> getPayment(@PathVariable("id") Integer id) {
log.info("<<<<<<<<<<< 我是通过feign >>>>>>>>>>>>");
return paymentService.getPaymentById(id);
}
} 消费端也完事了:
总测试步骤:
1、启动服务端
2、启动消费端
3、地址栏输入url: http://localhost/feign/payment/get/1 // 为什么不加端口号(回去看 消费端 Yml 配置 有说明)
4、结果:
如果结果为:{"code":200,"message":"成功","data":{"id":1,"desc":"98K"}}
就是和服务端自测结果一样,恭喜你 成功了 如果你 有幸看到这里:
咋青山不改,绿水长流,不妨看看小编其他作品,很香哟, 呵呵

第二步OpenFeign 实操总结: 其实就两点:
①、在消费端启动类加:@EnableFeignClients 注解
②、在业务逻辑 Service 接口加: @FeignClient 注解 即可

三、总结

这是 SpringCloud 的 OpenFeign 篇,后续小编会从 “Hystrix、Gateway …” 等坚持以博客的方式来分享自己对SpringCloud 的理解,并从不同角度和大家分享工作心得,并且含有相关Demo,最终小编会发布到GitHub上,供大家下载、分享、交流、指正,下面是源码地址:

GitHub:https://github.com/msxdlb/Spring-Cloud-2020

有问题或错误请及时联系小编或关注小编公众号 “CodeCow”,小编一定及时回复和改正 啦

《 心有多大,舞台就有多大 》 人得有——理想

2020/04/16 午后

SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用的更多相关文章

  1. SpringCloud升级之路2020.0.x版-25.OpenFeign简介与使用

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 S ...

  2. SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...

  3. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  4. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  5. 三分钟学会@Autowired@Qualifier@Primary注解

    三分钟学会@Autowired@Qualifier@Primary注解 2018.10.08 20:24 154浏览 今天主要简单的跟大家介绍一下spring自动装配相关的@Autowired,@Qu ...

  6. SpringCloud之OpenFeign

    SpringCloud之openFeign Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架 ...

  7. SpringCloud 服务间互相调用 @FeignClient注解

    SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题 首先,保证几个服务都在一个Eureka中注册 ...

  8. springcloud(三):服务提供与调用

    上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例. 案例中有三个角色:服务注册中心.服务提 ...

  9. springcloud(三)-Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

随机推荐

  1. JDK 配置环境变量

    1.配置环境变量 右击 我的电脑 --> 属性 --> 高级系统设置 --> 高级 --> 环境变量 在系统变量里新建 JAVA_HOME 变量,变量值如下 D:\work_s ...

  2. 1 ThinkPHP框架初识

    一.PHP主流框架介绍 主流的框架有laravel.symfony.thinkphp MVC和三层结构 MVC可以说是一种开发模式,三层结构是一种开发习惯,严格来讲,他们两者是完全不同的概念,但是在实 ...

  3. 题目分享L

    题意:n个人围成一个环,每个人初始有一些金币,每个人可以把金币递给相邻的人,问最少传递多少金币使每个人金币数相同? 分析:首先在保证最优的情况下不可能会出现相邻的两个人互相送金币,因为这样他们公共的部 ...

  4. centos7 安装高版本svn

    一.安装高版本svn 1.创建一个新的yum库文件,vim /etc/yum.repos.d/wandisco-svn.repo 内容如下 [WandiscoSVN] name=Wandisco SV ...

  5. MES系统的模型结构和主要功能(二)

    上一节,我们主要说了Mes系统是什么,以及它的特点和难点,本节,再来讨论一下一个合格的MES系统的模型结构和基本功能. 现代工厂的快速发展,对MES系统提出了更高的要求,其必须满足范围广泛的任务要求, ...

  6. Circle of Monsters(贪心)

    n个怪物围成一圈,每个怪物有自己的血量和爆炸伤害. 怪物在死后会对下一个怪物造成爆炸伤害,又死了又可以爆炸...... 你每发子弹可以对怪物造成1点伤害,求杀死所有怪物的最小子弹数. 传送门 \(\c ...

  7. Docker知识点整理

    目录 1. Docker简介 1.1 Docker是什么 1.2 在隔离的容器中运行软件 1.3 分发容器 2. Docker镜像 2.1 Docker镜像简介 2.2 Docker镜像常见操作 2. ...

  8. quartus II Warning 好的时序是设计出来的,不是约束出来的

    一.Warning (15714): Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings r ...

  9. Spring Boot定时任务运行一段时间后自动关闭的解决办法

    用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...

  10. java ->IO流_File类

    IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...