SpringCloud版本:Finchley.SR2
SpringBoot版本:2.0.3.RELEASE
源码地址: https://gitee.com/bingqilinpe...
Tips:OpenFeign的使用类似于Dao接口的开发
上一篇使用了RestTemplate的服务调用,但是有一些问题:通过RestTemplate发送请求时候,携带参数比较的繁琐,另外RestTemplate中需要写完整的Url,这一步也是比较麻烦的。
今天就来分享一种更加简单的方式,OpenFeign的方式。
OpenFeign是声明式的Http客户端,通过OpenFeign发送Http请求非常的简单
Feign 和 OpenFeign是两个技术,都是作为服务调用存在的,OpenFeign 是SpringCloud在Feign的基础上进行封装得到的,支持SpringMvc的注解。
Tips:代码在之前项目的基础上进行开发,源码地址: https://gitee.com/bingqilinpe...
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud-demo-20f</artifactId> <groupId>com.lby</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-openfeign-8806</artifactId> <dependencies> <!-- openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- Eureka 客户端的依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- web的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 测试的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
package com.lby; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; /** * @EnableFeignClients OpenFeign的注解 */ @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class OpenFeignRun8806 { public static void main(String[] args) { SpringApplication.run(OpenFeignRun8806.class,args); } }
server: port: 8806 #指定当前服务的名称 会注册到注册中心 spring: application: name: eureka-openfeign-8806 # 指定 服务注册中心的地址 eureka: client: serviceUrl: defaultZone: http://localhost:8801/eureka,http://localhost:8800/eureka
通过四步我们就拥有了一个最初步的项目,接下来,我们会通过接口+注解的方式开发OpenFeign的服务调用。
OpenFeign的开发方式:接口+注解,微服务调用的接口+@FeignClient
package com.lby.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; /** * @author luxiaoyang * @create 2020-04-05-19:41 * * @FeignClient 参数是要请求服务的服务名称 */ @Component @FeignClient(value = "eureka-client-8803") public interface ConsumerFeignService { /** * 接口中的方法是被调用服务的Controller接口 */ @GetMapping("showImgById") String showImgById(@RequestParam("id") Integer id); }
接口的书写规则如下图所示:
package com.lby.controller; import com.lby.service.ConsumerFeignService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author luxiaoyang * @create 2020-04-05-19:47 */ @RestController public class ConsumerController { /** * 直接装配OpenFeign的服务调用接口 */ @Resource private ConsumerFeignService consumerFeignService; @GetMapping("testOpenFeign") public String testOpenFeign(){ String s = consumerFeignService.showImgById(1); return "Feign服务调用的结果为:"+s; } }
启动注册中心,服务提供者(两个)(启动方法见上一篇),以及Feign服务
请求eureka-openfeign-8806的Controller接口: http://127.0.0.1 :8806/testOpenFeign
可以看到两次请求都能够获取服务提供者的响应,并且能够负载均衡
以上就是OpenFeign的基本使用,关于OpenFeign的其他使用见下篇文章。
源码地址: https://gitee.com/bingqilinpe...
要掌握SpringCloud更多的用法,请持续关注本系列教程。
欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。