SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用
唯能极于情,故能极于剑
有问题或错误请及时联系小编或关注小编公众号 "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等注解的使用的更多相关文章
- SpringCloud升级之路2020.0.x版-25.OpenFeign简介与使用
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 S ...
- SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...
- Mybatis sql映射文件浅析 Mybatis简介(三) 简介
Mybatis sql映射文件浅析 Mybatis简介(三) 简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 三分钟学会@Autowired@Qualifier@Primary注解
三分钟学会@Autowired@Qualifier@Primary注解 2018.10.08 20:24 154浏览 今天主要简单的跟大家介绍一下spring自动装配相关的@Autowired,@Qu ...
- SpringCloud之OpenFeign
SpringCloud之openFeign Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架 ...
- SpringCloud 服务间互相调用 @FeignClient注解
SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题 首先,保证几个服务都在一个Eureka中注册 ...
- springcloud(三):服务提供与调用
上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例. 案例中有三个角色:服务注册中心.服务提 ...
- springcloud(三)-Eureka
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
随机推荐
- Fourier Transform
为了在统一框架里分析周期信号与非周期信号,可以给周期信号也建立傅里叶变换. 有两种方法求周期信号的傅里叶变换: **1. 利用傅里叶级数进行构造 ** 对于周期信号\(x(t)\),其傅里叶级数展开式 ...
- Codeforce 1255 Round #601 (Div. 2)D. Feeding Chicken (模拟)
Long is a huge fan of CFC (Codeforces Fried Chicken). But the price of CFC is increasing, so he deci ...
- POJ 3241Object Clustering曼哈顿距离最小生成树
Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into several ...
- bzoj4318 OSU!和bzoj 3450 Tyvj1952 Easy
这俩题太像了 bzoj 3450 Tyvj1952 Easy Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点 ...
- python(读取 excel 操作 xlrd 模块)
一.安装 xlrd 模块 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境. 或者在 cmd 窗口 pip ...
- B - Housewife Wind POJ - 2763 树剖+边权转化成点权
B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为 ...
- 网络流 O - Marriage Match IV
题目链接:https://vjudge.net/contest/299467#problem/O 题目思路:网络流+最短路 这个是一个最短路+最大流,最短路容易,就是跑起点到每一个点的距离. 但是这个 ...
- [hdu5312]数的拆分,数学推导
题意:给定一个序列,a[n]=3n(n-1)+1,n>=1,求给定的m(m<=1e9)最少可以用几个a里面的数表示(可以重复) 思路:对答案分类 (1)假定答案为1,则m必定是a中的某一个 ...
- PC端软件配置
一,cmder软件安装 二,Snipaste软件安装 三,vwmare虚拟机安装 四,sublime安装 五,notepad++安装 六,Python环境 anaconda navigator安装 七 ...
- Codeforces Round #643 (Div.2)
前言:这套cf我感觉出的很不错,AB就不说了,唯一有点欠缺的就是C和D的位置应该换一下,C出的挺不错,反正我当时没有想出来(赛后补题的时候其实也不难..听朋友说还可以FFT优化,然而我是个图论手并不会 ...