开发公司Ribbon - 介绍

Spring Cloud 是基于 Netflix Ribbon 开发公司实现的一套客户端负载开发公司均衡的工具;开发公司提供客户端的软件负载开发公司均衡算法和服务调用;

Ribbon开发公司工作时分两步:

开发公司第一步先选择 EurekaServer(或者nacos),开发公司它优先选择在同一个区域内负载较少的 server;
第二步再根据用户指定的策略,在从 server 取到的服务注册列表中选择一个地址;

一、Ribbon 核心组件

引入 Ribbon:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  4. </dependency>

 IRule 定义了负载均衡的方式:

二、Ribbon 交互的三种级别层次

a)Spring DiscoveryClient:提供了对 Ribbon 和 Ribbon 中缓存的注册服务的最低层次访问;
b)启用了 RestTemplate 的 Spring DiscoveryClient;
c) Feign 客户端;

注册中心必不可少,在主程序类上添加注解

@EnableDiscoveryClient:表明可以被注册中心发现。是 Sring Cloud 的触发器,其作用是使应用程序能够使用 DiscoveryClient 和 Ribbon 库;

2.1、使用 DiscoveryClient 查找信息

  1. @Component
  2. public class ProviderDiscoveryClient {
  3. //自动注入 DiscoveryClient 类,该类用于与 Ribbon 交互
  4. @Autowired
  5. private DiscoveryClient discoveryClient;
  6. public Provide getProvide(String providerId) {
  7. RestTemplate restTemplate = new RestTemplate();
  8. //获取服务提供者的所有实例列表,ServiceInstance 用于保存关于服务的特定实例(包括主机名、端口荷 URL)
  9. List<ServiceInstance> instances = discoveryClient.getInstances("provider-instance-name");
  10. if (instances.size()==0) return null;
  11. //检索要调用的服务端点
  12. String serviceUri = String.format("%s/providers/%s",instances.get(0).getUri().toString(), providerId);
  13. //使用标准的 Spring REST 模板类去调用服务
  14. ResponseEntity< provider > restExchange =
  15. restTemplate.exchange(
  16. serviceUri,
  17. HttpMethod.GET,
  18. null, Provider.class, providerId);
  19. return restExchange.getBody();
  20. }
  21. }

2.2、使用带有 Ribbon 功能的 Spring RestTemplate 调用服务

需要对 RestTemplate 类用 @LoadBalanced 注解显示声明;

  1. @SpringBootApplication //只需要这个注解即可
  2. public class Application {
  3. @LoadBalanced //告诉 Spring Cloud 创建一个支持 Ribbon 的 RestTemplate
  4. @Bean
  5. public RestTemplate getRestTemplate(){
  6. return new RestTemplate();
  7. }
  8. public static void main(String[] args) {
  9. SpringApplication.run(Application.class, args);
  10. }
  11. }

使用 Ribbon 的 RestTemplate 来调用服务:

  1. @Component
  2. public class ProviderRestTemplateClient {
  3. //自动注入即可,不用实例化
  4. @Autowired
  5. RestTemplate restTemplate;
  6. public Provider getProvider(String providerId){
  7. ResponseEntity<Provider> restExchange =
  8. restTemplate.exchange(
  9. //使用 Eureka 服务 ID 来构建目标 URL
  10. "http://provider-instance-name/providers/{providerId}",
  11. HttpMethod.GET,
  12. null, Provider.class, providerId);
  13. return restExchange.getBody();
  14. }
  15. }

2.3、使用 Netflix Feign 客户端调用服务

引入:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>

在主程序类上添加注解 @EnableFeignClients:表示启用 Feign 客户端;

定义用于调用服务提供者的 Feign 接口

  1. @FeignClient("provider-instance-name") //标识服务为 feign 的客户端
  2. public interface ProviderFeignClient {
  3. //定义端点的路径和动作
  4. @RequestMapping(
  5. method= RequestMethod.GET,
  6. value="/providers/{providerId}",
  7. consumes="application/json")
  8. //定义传入端点的参数,该方法可以由客户端调用以触发组织服务
  9. Provider getProvider(@PathVariable("providerId") String providerId);
  10. }

要是用 ProviderFeignClient 类,开发人员只需要自动装配并使用它即可。

转自:https://www.cnblogs.com/dlhjw/p/15845348.html

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发