Spring Cloud 组件入门学习---Ribbon
2020-07-15 06:08
661 查看
简介
Spring Cloud Ribbon 是Spring Cloud Netflix 子项目的核心组件之一,主要给服务间调用及API网关转发提供负载均衡的功能,负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调用其他服务时,Ribbon可以很方便的实现负载均衡功能。
项目搭建
搭建服务提供模块
1、创建一个user-service,用于给Ribbon提供服务调用。
2、引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3、配置
server: port: 8201 spring: application: name: user-service eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8001/eureka/
4、创建服务提供接口
@RestController @RequestMapping("/user") public class UserController { private Logger LOGGER = LoggerFactory.getLogger(this.getClass()); @Autowired private UserService userService; @PostMapping("/create") public CommonResult create(@RequestBody User user) { userService.create(user); return new CommonResult("操作成功", 200); } @GetMapping("/{id}") public CommonResult<User> getUser(@PathVariable Long id) { User user = userService.getUser(id); LOGGER.info("根据id获取用户信息,用户名称为:{}",user.getUsername()); return new CommonResult<>(user); } @GetMapping("/getUserByIds") public CommonResult<List<User>> getUserByIds(@RequestParam List<Long> ids) { List<User> userList= userService.getUserByIds(ids); LOGGER.info("根据ids获取用户信息,用户列表为:{}",userList); return new CommonResult<>(userList); } @GetMapping("/getByUsername") public CommonResult<User> getByUsername(@RequestParam String username) { User user = userService.getByUsername(username); return new CommonResult<>(user); } @PostMapping("/update") public CommonResult update(@RequestBody User user) { userService.update(user); return new CommonResult("操作成功", 200); } @PostMapping("/delete/{id}") public CommonResult delete(@PathVariable Long id) { userService.delete(id); return new CommonResult("操作成功", 200); } }
搭建服务调用模块
同样的步骤
1、引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
2、修改配置
server: port: 8301 spring: application: name: ribbon-service zipkin: base-url: http://localhost:9411 sleuth: sampler: probability: 0.1 #设置Sleuth的抽样收集概率 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8001/eureka/ service-url: user-service: http://user-service
3、服务调用
@RestController @RequestMapping("/user") public class UserRibbonController { @Autowired private RestTemplate restTemplate; @Value("${service-url.user-service}") private String userServiceUrl; @GetMapping("/{id}") public CommonResult getUser(@PathVariable Long id) { return restTemplate.getForObject(userServiceUrl + "/user/{1}", CommonResult.class, id); } @GetMapping("/getByUsername") public CommonResult getByUsername(@RequestParam String username) { return restTemplate.getForObject(userServiceUrl + "/user/getByUsername?username={1}", CommonResult.class, username); } @GetMapping("/getEntityByUsername") public CommonResult getEntityByUsername(@RequestParam String username) { ResponseEntity<CommonResult> entity = restTemplate.getForEntity(userServiceUrl + "/user/getByUsername?username={1}", CommonResult.class, username); if (entity.getStatusCode().is2xxSuccessful()) { return entity.getBody(); } else { return new CommonResult("操作失败", 500); } } @PostMapping("/create") public CommonResult create(@RequestBody User user) { return restTemplate.postForObject(userServiceUrl + "/user/create", user, CommonResult.class); } @PostMapping("/update") public CommonResult update(@RequestBody User user) { return restTemplate.postForObject(userServiceUrl + "/user/update", user, CommonResult.class); } @PostMapping("/delete/{id}") public CommonResult delete(@PathVariable Long id) { return restTemplate.postForObject(userServiceUrl + "/user/delete/{1}", null, CommonResult.class, id); } }
负载均衡功能演示
1、启动eureka-server于8001端口;
2、启动Ribbon-service于8301端口;
3、启动两个user-service,分别用8201和8202端口
4、调用接口进行测试:http://localhost:8301/user/1
相关文章推荐
- 微服务学习SpringCloud之 Ribbon组件实现负载均衡
- SpringCloud学习--SpringCloud常用组件介绍(Eureka,Ribbon,Feign,Hystrix,Zuul,Spring Cloud Config...)
- springCloud入门学习(七):通过属性自定义Ribbon配置
- Spring Cloud 组件入门学习---Security
- SpringCloud入门学习笔记8--消息总线组件SpringCloudBus
- Spring Cloud 组件入门学习---Zuul
- SpringCloud入门学习笔记6--Spring Cloud Config 配置中心
- Spring Cloud与微服务学习总结(1)——Spring Cloud及微服务入门
- Spring Cloud 学习笔记——入门、特征、配置
- springcloud入门及核心组件
- SpringCloud学习教程二( 服务消费者rest+ribbon )
- 微服务学习SpringCloud入门之环境搭建
- SpringCloud 学习 | 第三篇: 服务消费者 Ribbon
- 利用SpringCloud搭建微服务2——负载均衡Ribbon组件的使用
- SpringCloud入门学习笔记5--微服务网关Zuul
- Spring Cloud 学习笔记——入门、特征、配置
- Spring Cloud与微服务学习总结(1)——Spring Cloud及微服务入门
- SpringCloud 学习 | 第五篇: ribbon断路器使用(hystrix)
- SpringCloud学习:Eureka、Ribbon和Feign
- Spring Cloud Alibaba之负载均衡组件 - Ribbon