Feign实战
一、前置知识
在springcloud中,微服务之间通过网络请求调用彼此的方法。常用的有工具有RestTemplate、HttpCilent、OkHttp等,这些工具在调用方法前需要构建url,比如拼接参数等。随着参数增多,url地址也会变长,参数还必须要一一对应,没有提示,需要自行检查,较为复杂。比如RestTemplate调用远程服务的代码如下:
@RequestMapping("/test")public String test(){String url = String.format("http://%s/loadTest", "spring-cloud-eureka-product");ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);return forEntity.getBody();}
而Feign通过调用本地方法的形式调用远程服务,从而简化了微服务彼此的调用方式。同时Feign是基于Ribbon的,因此自带负载均衡功能,无需额外配置。
二、Feign实战
项目使用的是Ribbon实战中的例子。
2.1 引入坐标依赖
在服务消费者order中引入feign依赖,如下所示。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
2.2 开启Feign功能
在启动类上加入@EnableFeignClients注解开启功能
@SpringBootApplication
@EnableFeignClients
public class SpringCloudEurekaOrderApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudEurekaOrderApplication.class, args);}}
2.3 添加feign接口
@FeignClient("spring-cloud-eureka-product")
public interface ProductClient {@RequestMapping("/loadTest")public String loadTest();
}
2.4 创建控制器
创建Controller
@RestController
public class FeignClientController {@Autowiredprivate ProductClient productClient;@RequestMapping("/loadTest")public String loadTest(){return productClient.loadTest();}}
2.5 启动所有服务
启动成功,结果如图2-1所示。
图2-1 启动成功的结果
2.6 访问
两次访问http://localhost:9005/loadTest,结果如下,结果也说明了feign自带负载均衡功能。
图2-2 访问结果