Feign简介
Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到 HTTP API的复杂度,不区分是否为restful。
快速体验
在用户微服务调用短信微服务的方法
(1)在javakf_user模块添加依赖(调用方)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
(2)修改javakf_user模块的启动类,添加注解
@EnableDiscoveryClient
@EnableFeignClients
(3)在javakf_user模块创建cn.com.javakf.user.client包,包下创建接口@FeignClient(value = "javakf-sms") public interface SmsClient { @RequestMapping(value = "/sms/{id}", method = RequestMethod.GET) public Result findById(@PathVariable("id") String id); }
@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务名保持一致,并且不能包含下划线。
@RequestMapping注解用于对被调用的微服务进行地址映射。
注意 @PathVariable注解一定要指定参数名称,否则出错
(4)修改javakf_user模块的 UserController@Autowired private SmsClient smsClient; @ApiOperation(value = "Feign调用测试-调用方", notes = "Feign调用测试-调用方") @RequestMapping("/sms/{id}") public Result findSmsById(@ApiParam(name = "id", value = "ID", required = true) @PathVariable String id) { return smsClient.findById(id); }
负载均衡
测试:同时开启多个短信微服务,看是否是轮流调用。
修改javakf_sms工程SmsController的findById方法
@ApiOperation(value = "Feign调用测试-被调用方", notes = "Feign调用测试-被调用方")
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
public Result findById(@PathVariable String id) {
System.out.println("No.1");
Map<String, String> map = new HashMap<String, String>();
map.put("Feign", "Feign:" + id);
return new Result(true, StatusCode.OK, "查询成功", map);
}
启动短信微服务后,修改端口和输出信息,再次启动基础微服务
浏览器执行http://localhost:10001/user/sms/1 看是否轮流启动。