spring cloud-ribbon
来源:互联网 发布:美工需要具备什么条件 编辑:程序博客网 时间:2024/06/06 03:59
我们在spring cloud-feign中提到,本篇我们将使用eureka+feign+ribbon搭建微服务的负载均衡。
ribbon是netflix发布的云中间层服务开源项目,其主要功能是提供客户端软件负载均衡算法,将netflix的中间层服务连接在一起。
eureka负责云端负载均衡,用于服务注册与发现,详情参考spring cloud-eureka。
我们用一张图展示ribbon和eureka的关系:
通过上图我们发现,服务提供者把服务实例注册到eureka server,服务消费者获得可用服务列表,然后通过ribbon组件进行负载均衡服务请求。
如果没有ribbon,我们会用nginx或LVS搭建微服务的负载均衡,下面我们讲解如何使用ribbon实现微服务负载均衡的。
我们首先启动eureka服务,然后启动microservice-provider-user多个服务提供者实例,多个服务提供者实例的application name是相同的,统一为microservice-provider-user,唯一不同的是端口号。
eureka和服务提供者实例启动后,重头戏演示服务消费者如何使用ribbon实现负载均衡请求:
1.我们需要在服务消费者的main程序用@RibbonClient注解定义服务提供者实例的application name:
@SpringBootApplication@EnableEurekaClient@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class) })public class ConsumerMovieRibbonApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerMovieRibbonApplication.class, args); }}
2.我们在业务的Controller通过application name访问服务提供者的服务:
@RestControllerpublic class MovieController { @Autowired private RestTemplate restTemplate; @GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class); }}
到此,我们便用ribbon实现了对服务提供者实例的负载均衡请求。
也许我们会有疑问,我们怎么知道服务消费者是负载均衡调用的服务提供者的服务呢?
为了解答上述疑问,我们使用LoadBalancerClient获得每次请求服务的host和port:
@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/movie/{id}")public User findById(@PathVariable Long id) { // http://localhost:7900/simple/ // VIP virtual IP // HAProxy Heartbeat ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user"); System.out.println("===" + ":" + serviceInstance.getServiceId() + ":" + serviceInstance.getHost() + ":" + serviceInstance.getPort()); return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class);}
我们多次刷新findById接口,控制台输出不同的host、port,则证明ribbon实现了对服务的负载均衡请求。
- spring cloud-ribbon
- spring cloud ribbon配置
- spring cloud Ribbon
- spring cloud -- Ribbon
- Spring Cloud Ribbon
- spring cloud ribbon
- Spring Cloud Ribbon
- spring-cloud【Ribbon】
- spring cloud day02【 ribbon】
- Spring Cloud Ribbon
- Spring Cloud Ribbon--智能路由
- Spring Cloud -- Ribbon负载均衡
- Spring Cloud源码分析Ribbon
- Spring Cloud Eureka+Ribbon+Hystrix
- Spring-Cloud 负载均衡 Ribbon
- 【Spring Cloud】Ribbon负载均衡
- Spring Cloud Ribbon服务重试
- Spring Cloud Ribbon 重试机制
- iOS 视频文件和图片文件缓存路径
- 我们,除了代码还有诗和远方
- 谈谈我对攻读计算机研究生的一些看法
- SQL Server 的本地时间和UTC时间
- 关注别人CSDN博客的方法
- spring cloud-ribbon
- 安装锁定文件INSTALL.LOCK的用途
- 【学习笔记03】java面向对象-封装
- linux下安装gitscrum+gitlab+nginx
- CCF NOI1118 序列第K小
- Struts(4)jstl标签技术基本介绍
- 如何用Java代码列出一个目录下所有的文件?
- ResultSet.next()方法
- SSH三大框架的工作原理及流程