概述
????????什么是Feign?与 Ribbon ?样,Feign 也是由 Netflflix 提供的,Feign 是?个声明式、模版化的 Web Service 客户端,它简化了开发者编写 Web 服务客户端的操作,开发者可以通过简单的接?和注解来调? HTTP API, Spring Cloud Feign,它整合了 Ribbon 和 Hystrix,具有可插拔、基于注解、负载均衡、服务熔断等?系列便捷功能。
特点
(1)Feign 是?个声明式的 Web Service 客户端;
(2)?持 Feign 注解、Spring MVC 注解、JAX-RS 注解;
(3)Feign 基于 Ribbon 实现,使?起来更加简单;
(4)Feign 集成了 Hystrix,具备服务熔断降级的功能。
示例
1.首先创建服务端项目,提供数据接口。
pom.xml
<parent>
? ?<groupId>org.springframework.boot</groupId>
? ?<artifactId>spring-boot-starter-parent</artifactId>
? ?<version>2.4.3</version>
? ?<relativePath/> <!-- lookup parent from repository -->
</parent>
?
<dependencies>
? ?<dependency>
? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ?</dependency>
? ?<dependency>
? ? ? ?<groupId>org.projectlombok</groupId>
? ? ? ?<artifactId>lombok</artifactId>
? ? ? ?<version>1.16.20</version>
? ? ? ?<scope>provided</scope>
? ?</dependency>
</dependencies>
application.yaml
server:
port: 8081
servlet:
? context-path: /api/server
spring:
application:
? name: userService
User
@Data
public class User {
? ?private Long id;
? ?private String name;
? ?private Integer age;
}
UserController
@RestController
public class UserController {
? ?@GetMapping("/getUserInfo")
? ?public User getUserInfo(){
? ? ? ?User user = new User();
? ? ? ?user.setId(1L);
? ? ? ?user.setName("BanQ");
? ? ? ?user.setAge(21);
? ? ? ?return user;
? }
}
启动类
@SpringBootApplication
public class ServerApplication {
? ?public static void main(String[] args) {
? ? ? ?SpringApplication.run(ServerApplication.class,args);
? }
}
浏览器访问:http://localhost:8081/api/server/getUserInfo
2.创建客户端项目,调用服务端接口。
pom.xml
<parent>
? ?<groupId>org.springframework.boot</groupId>
? ?<artifactId>spring-boot-starter-parent</artifactId>
? ?<version>2.1.12.RELEASE</version>
? ?<relativePath/> <!-- lookup parent from repository -->
</parent>
?
<dependencies>
? ?<dependency>
? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ?</dependency>
? ?<dependency>
? ? ? ?<groupId>org.projectlombok</groupId>
? ? ? ?<artifactId>lombok</artifactId>
? ? ? ?<version>1.16.20</version>
? ? ? ?<scope>provided</scope>
? ?</dependency>
? ?<dependency>
? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ?<artifactId>spring-cloud-starter-openfeign</artifactId>
? ? ? ?<version>2.0.2.RELEASE</version>
? ?</dependency>
</dependencies>
application.yaml
server:
port: 8082
servlet:
? context-path: /api/client
UserFeignClient
@FeignClient(
? ? ? ?name = "userService",
? ? ? ?url = "http://localhost:8081/api/server"
)
public interface UserFeignClient {
? ?@RequestMapping(value = "/getUserInfo",method = RequestMethod.GET)
? ?@ResponseBody
? ?String getUserInfo();
}
TestController
@RestController
public class TestController {
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/get")
public String get(){
return userFeignClient.getUserInfo();
}
}
启动类
@EnableFeignClients
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class,args);
}
}
浏览器访问:http://localhost:8082/api/client/get
这样就实现了通过feign client来调用远程(第三方)接口了。
实例代码:SpringBoot使用Feign调用第三方接口Demo
|