Spring Cloud OpenFeign 作者:哇塞大嘴好帥(哇塞大嘴好帅)
作者:哇塞大嘴好帥(哇塞大嘴好帅)
1.OpenFeign介绍
1.1什么是OpenFeign
他是一个生命是的Web服务客户端,让编写Web服务端变得非常容易,只需要创建一个接口在接口上添加注解就可以了
1.2能做什么
由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置他,即可完成对服务提供方的接口绑定,简化了Spring cloud Ribbon时,自动封装服务调用客户端的开发量。
2.OpenFeign 使用步骤
2.1添加Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
2.3配置中心
server:
port: 7002
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true
register-with-eureka: false
service-url:
#注册中心地址
defaultZone: http://root:admin@127.0.0.1:7001/eureka/
2.3主方法配置
在SpringBoot的启动类一定要加**@EnableFeignClients** 开启OpenFeign功能
2.2接口+注解
2.2.1 OpenFeign Controller
package com.example.opfign.controller;
import com.example.opfign.server.PaymentFeignService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
@Controller
public class FFeignController {
@Resource
private PaymentFeignService paymentFeignService;
@RequestMapping("test1")
@ResponseBody
public String test1() {
System.out.println("asd");
return paymentFeignService.test1();
}
}
2.2.2 调用接口 Service层
在微服务调用接口加上 @FeignClient注解
package com.example.opfign.server;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Component
@FeignClient(value = "LoginRecord")
public interface PaymentFeignService {
@RequestMapping("test1")
@ResponseBody
public String test1();
}
当我们访问 test1 的时候 test1会通过PaymentFeignService调用接口,比如 @FeignClient(value = “LoginRecord”) 就会去注册Eureka的微服务去调用test1控制器。并且实现负载均衡。
3.OpenFeign 的坑
3.1多参数设置
/**
* 测试类
* @return String.class
*/
@GetMapping("/userlogin/test1")
public String test1(@RequestParam("a") String a, @RequestParam("b")String b);
3.2参数是对象
前端axios代码:
if (this.userformif){
axios.post("http://127.0.0.1:8080/userlogin/enroll",
this.userdata,
{headers: {
'Content-Type': 'application/json;charset=UTF-8'
}}
).then(function (response) {
alert(response.data);
}).catch(function (response) {
alert("注册失败");
});
}
}
向后端发送请求,携带了 this.userdata数据,并且设置格式为application/json;charset=UTF-8
OpenFeign Controller代码:
@CrossOrigin
@PostMapping(value = "/userlogin/enroll",consumes = "application/json")
@ResponseBody
public String enroll(@RequestBody User user) {
System.out.println("接受的数据"+user);
return userLoginEnrollOpenFeignService.enroll(user);
}
OpenFeign Service代码
@PostMapping(value = "/userlogin/enroll")
public String enroll(@RequestBody User user);
微服务的Controllerd代码:
@CrossOrigin
@PostMapping(value = "/userlogin/enroll",consumes = "application/json")
@ResponseBody
public String enroll(@RequestBody User user) {
....
}