一、前言
OpenFeign 是一个 Web 声明式的 Http 客户端调用工具,提供接口和注解形式调用。
SpringCloud 第一代采用 feign 第二代采用 openfeign
openfeign 客户端作用:是一个 Web 声明式的 Http 客户端远程调用工具,底层是封装HttpClient 技术。
Openfeign 属于 SPringleCloud 自己研发,而 feign 是 netflix 代码写法几乎是没有任何变化。
注意 feign 客户端调用的事项:如果请求参数没有加上注解的话,默认采用 post 请求发送。
Openfeign 默认是支持负载均衡,ribbon。
二、示例
1.客户端
(1).maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2).service
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "alibaba-provider")
public interface FeignDemoService {
//provider配置了路径server.servlet.context-path=/provider,所以要添加 provider
@RequestMapping("/provider/demo")
public String test();
}
(3).controller
import com.asyf.demo.feignservice.FeignDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/")
public class DemoController {
@Autowired
private FeignDemoService feignDemoService;
@RequestMapping(value = "/demo")
public String test() {
return "consumer:" + feignDemoService.test();
}
}
2.服务端
服务端提供接口,并启动2个服务注册到nacos注册中心
(1).controller
@Value("${server.port}")
private Integer port;
@RequestMapping(value = "/demo", method = RequestMethod.GET)
public String test() {
System.out.println(test.length());
return "abc" + " - port:" + port;
}
3.启动服务端和客户端
4.测试
访问http://localhost:8090/consumer/demo
注意:
(1)接口是否通
(2)负载均衡是否好用