【前言】
最近接到一个需求,需要对接第三方平台的api,在设计方案通过之后,打算将对接服务拆分出来,因为现在的项目没有使用到注册中心,打算单独引入OpenFeign组件简化服务通信方式,也为了更好的支持项目后续向微服务的转变!
很多人以为OpenFeign必须依赖于注册中心,其实不然,OpenFeign可以跳过注册中心,完成服务器间的通信
项目目录结构
feign-demo:root
api:api层,供消费者使用
consumer:服务消费者
provider:服务生产者
相关代码
api
创建TestApi接口,添加@FeignClient注解
name:服务名称 (注:若使用注册中心,此处应该写生产者服务名称)
url:生产者的url地址
@FeignClient(name = "feignTest", url = "localhost:8081/feign")
public interface TestApi {
@GetMapping("test/{data}")
String test1(@PathVariable("data") String data);
@PostMapping("test/{data}")
String test2(@PathVariable("data") String data);
}
consumer
1、创建启动类并添加@EnableFeignClients注解
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
2.创建ConsumerController
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private TestApi testApi;
@GetMapping("test/{data}")
public String test1(@PathVariable("data") String data) {
return testApi.test1(data);
}
@PostMapping("test/{data}")
public String test2(@PathVariable("data") String data) {
return testApi.test2(data);
}
}
provider
创建ProviderController
@RestController
@RequestMapping("/feign")
public class ProviderController {
@GetMapping("test/{data}")
public String test1(@PathVariable("data") String data) {
return "test-get";
}
@PostMapping("test/{data}")
public String test2(@PathVariable("data") String data) {
return "test-post";
}
}
验证
分别启动consumer(8080)、provider(8081)
get
post
总结:在使用注册中心时,OpenFeign作为服务间通信的组件,它本身集成了Ribbon的负载均衡能力、错误重试、日志、Hystrix熔断等机制,同时也能够支持点对点的通信方式,让开发者感觉更像是调用本地接口,而不是发起HTTP请求。
demo地址
相关文章
暂无评论...