在SpringCloud之整合ribbon中使用Spring的RestTemplate整合Ribbon负载均衡以实现消费者调用服务提供者的服务。
了解到了Feign这个组件,既能调用服务提供者的服务,又能负载均衡,不需要多余的整合。
一、Feign简介
Feign是Netflix开发的声明式,模板化的HTTP客户端,
- 微服务之间的调用本质还是http请求,使用feign只需要定义一个interface,就能实现服务之间的调用。
- Feign集成了Ribbon技术,所以也支持负载均衡(轮询)
二、映入依赖
服务提供者和服务提供者都需要引入feign的依赖
<!--引入Feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--引入Feign-->
三、配置
3.1 服务提供者
需要在服务的启动类上加注解
@EnableFeignClients
3.2 服务消费者
1.在服务的启动类上加注解
@EnableFeignClients
2.创建调用提供者的接口
- FeignCilent注解,填写调用的服务在Eurake中注册的服务名称
- 调用方法的请求路径和请求类型,写服务提供者对应方法的路径和请求类型
@FeignClient("SERVICE-PROVIDER-USER")
public interface UserService {
@RequestMapping(value = "/user/findAll")
public List<UserBean> queryAll();
@RequestMapping(value = "/user/updateName",method = RequestMethod.GET)
public void updateName(@RequestParam String name);
}
四、传递参数
4.1 基本数据类型
restful风格参数,使用@PathVariable注解声明
@RequestMapping("/{id}/queries")
public UserBean getUser(@PathVariable Long id);
4.2 传递数组类型的参数
使用@RequestParam注解声明
@RequestMapping(value = "/user/updateName",method = RequestMethod.GET)
public void updateName(@RequestParam String name);
4.3 传递带有对象的参数
使用@RequestBody注解声明
@RequestMapping(value = "/user/update",method = RequestMethod.PUT)
public void update(@RequestBody UserBean user);
五、测试
服务消费者调用updateName方法两次。
第一次,服务提供者1的updateName接口被调用
第一次,服务提供者2的updateName接口被调用