远程调用框架OpenFeign
2023-01-09 15:03:53 0 举报
AI智能生成
远程调用框架OpenFeign的整个学习思路导图,从入门到精通,不怕学不会就怕没思路。
作者其他创作
大纲/内容
了解概念
OpenFeign是一个显示声明式的WebService客户端
OpenFeign的设计宗旨式简化Java Http客户端的开发
OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如 @RequesMapping/@GetMappering等
它的作用
使用OpenFeign能让编写Web Service客户端更加简单。使用时只需定义服务接口,然后在上面添加注解即可
在OpenFeign的协助下,我们只需创建一个接口并使用注解的方式进行配置<br>(类似于Dao接口上面的Mapper注解)即可完成对服务提供方的接口绑定,调用远程接口像调用本地方法一样<br>
OpenFeign集成了Ribbon,利用ribbon维护了服务列表,并且通过ribbon实现了客户端的负载均衡
OpenFeign的使用
创建服务提供者
引入jar包
<dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-web</artifactId><br></dependency><br><!-- 添加 Nacos 支持 --><br><dependency><br> <groupId>com.alibaba.cloud</groupId><br> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><br></dependency><br>
添加配置文件
spring:<br> application:<br> name: springcloud-openfeign-provider # 项目名称(nacos 注册的服务名)<br> cloud:<br> nacos:<br> discovery:<br> username: nacos # nacos 登录用户名<br> password: nacos # nacos 密码<br> server-addr: 127.0.0.1:8848 # nacos 服务端地址<br>server:<br> port: 8082 # 项目启动端口号<br>
添加服务方法
@SpringBootApplication<br>@RestController<br>public class OpenFeignProviderApplication {<br> public static void main(String[] args) {<br> SpringApplication.run(OpenFeignProviderApplication.class, args);<br> }<br> /**<br> * 为客户端提供可调用的接口<br> */<br> @RequestMapping("/call/{name}")<br> public String call(@PathVariable String name) {<br> return LocalTime.now() + "——服务提供者:" + name;<br> }<br>}<br>
创建服务消费者
引入jar包
<dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-web</artifactId><br> </dependency><br> <!-- 添加 nacos 框架依赖 --><br> <dependency><br> <groupId>com.alibaba.cloud</groupId><br> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><br> </dependency><br> <!-- 添加 openfeign 框架依赖 --><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-openfeign</artifactId><br> </dependency><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-loadbalancer</artifactId><br> </dependency>
添加配置文件
spring:<br> application:<br> name: springcloud-openfeign-consumer # 项目名称(nacos 注册的服务名)<br> cloud:<br> nacos:<br> discovery:<br> username: nacos # nacos 登录用户名<br> password: nacos # nacos 密码<br> server-addr: 127.0.0.1:8848 # nacos 服务端地址<br>server:<br> port: 8091 # 项目启动端口号<br>member-provider.requesturl: 127.0.0.1:8081
开启 OpenFeign
@SpringBootApplication<br>@EnableFeignClients // 启用 OpenFeign<br>public class OpenFeignCustomerApplication {<br> public static void main(String[] args) {<br> SpringApplication.run(OpenFeignCustomerApplication.class, args);<br> }<br>}
创建 OpenFeign <br>与服务提供者的调用接口<br>
/**<br> * 通过 OpenFeigen 实现远程调用的三种方式<br> */<br>@Component<br>//@FeignClient("springcloud-openfeign-provider") // 1.通过注册中心服务发现实现远程调用<br>//@FeignClient(name = "member",url = "127.0.0.1:8082")//2.指定url地址,不经过Ribbon的服务选择,直接请求服务<br>@FeignClient(name = "member",url = "${member-provider.requesturl}",contextId = "dynamicUrl")//动态url地址,不经过Ribbon的服务选择,直接请求服务<br>public interface SpringCloudOpenFeignProviderClient {<br><br> @GetMapping("/call/{name}") // 使用 get 方式,调用服务提供者的 /call/{name} 接口<br> String call(@PathVariable(value = "name") String name);<br>}
使用远程服务接口
@RestController<br>public class ConsumerController {<br> @Resource<br> private SpringCloudOpenFeignProviderClient openFeignProviderClient; // 加载 openfeign client<br><br> @GetMapping("/consumer")<br> public String consumer(@RequestParam String name) {<br> // 向调用本地方法一样,调用 openfeign client 中的方法<br> return openFeignProviderClient.call(name);<br> }<br>}
远程调用的三种方式
1.通过注册中心服务发现实现远程调用
2.指定url地址,不经过Ribbon的服务选择,直接请求服务
3.动态url地址,不经过Ribbon的服务选择,直接请求服务<br>通过配置文件,配置url地址
日志配置
描述
Feign 提供了日志打印功能,可以通过配置来调整日志级别,从而对 Feign 接口的 调用情况进行监控和输出
日志级别
NONE∶默认的,不显示任何日志<br>BASIC∶仅记录请求方法、URL、响应状态码及执行时间;<br>HEADERS∶除了 BASIC中定义的信息之外,还有请求和响应的头信息;<br>FULL∶除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
应用实例
代码示例
@Configuration<br>public class OpenFeignConfig {<br> /**<br> * 指定日志级别<br> * @return<br> */<br> @Bean<br> public Logger.Level logLevel(){<br> return Logger.Level.FULL;<br> }<br>}<br>
yml配置
logging:<br> # openfeign接口远程调用过程打印信息 级别-Debug<br> level:<br> com.jesonking.openfeigncustomer.SpringCloudOpenFeignProviderClient: debug<br>
超时时间
默认超时时间
openfeign默认超时时间为1秒,即调用得到响应的时间超出1秒则会超时抛出异常
设置超时时间
1.设置Ribbon的超时时间(不推荐)
2.设置openFeign的超时时间(推荐)
OpenFeign的实现原理
OpenFeign通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务
原理图
底层实现<br>源码
源码实现结构图
结构图
源代码地址
https://github.com/spring-cloud/spring-cloud-openfeign
收藏
0 条评论
下一页