一、Ribbon 同Eureka使用,注意事项

  前几节一同使用,注意事项:

  如果没有其他区域数据源,则根据客户端配置进行猜测(与实例配置相反)。能够获取eureka.client.availabilityZones,这是从区域名称Region到区域列表zone的映射,并拉出实例自己区域的第一个区域(即eureka.client.region,默认为“us-east-1”以便与本机Netflix进行可互换性)。

二、Ribbon脱离Eureka使用

  Eureka是一种抽象发现远程服务器的便捷方式,因此您不必在客户端对其URL进行硬编码,但如果您不想使用它,Ribbon和Feign仍然非常适合。

2.1、禁用eureka

ribbon:
eureka:
enabled: false

2.2、增加微服务地址

  假设你已经声明了一个@RibbonClient作为“stores”,并且Eureka没有被使用(甚至不在类路径中)。功能区客户端默认为配置的服务器列表,您可以像这样提供配置:application.yml. 

stores:
ribbon:
listOfServers: localhost:7900

2.3、直接使用ribbon 的api

public class MyClass {
@Autowired
private LoadBalancerClient loadBalancer; public void doStuff() {
ServiceInstance instance = loadBalancer.choose("stores");
URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
// ... do something with the URI
}
}

三、其他

3.1、缓存功能区配置

  每个名为客户端的功能区都有一个Spring Cloud维护的对应的子应用程序上下文,这个应用程序上下文在第一次请求到客户端时被延迟加载。此延迟加载行为可以更改为在启动时通过指定功能区客户端的名称来热切加载这些子应用程序上下文。

application.yml. 

ribbon:
eager-load:
enabled: true
clients: client1, client2, client3

3.2、如何配置Hystrix线程池

  如果将zuul.ribbonIsolationStrategy更改为THREAD,则Hystrix的线程隔离策略将用于所有路由。在这种情况下,HystrixThreadPoolKey默认设置为“RibbonCommand”。这意味着所有路由的HystrixCommands将在相同的Hystrix线程池中执行。此行为可以使用以下配置进行更改,并且会导致在每个路由的Hystrix线程池中执行HystrixCommands。

application.yml. 

zuul:
threadPool:
useSeparateThreadPools: true

  在这种情况下,默认的HystrixThreadPoolKey与每个路由的服务ID相同。要为HystrixThreadPoolKey添加前缀,请将zuul.threadPool.threadPoolKeyPrefix设置为您要添加的值。例如:

application.yml. 

zuul:
threadPool:
useSeparateThreadPools: true
threadPoolKeyPrefix: zuulgw

3.3、如何为功能区的IRule提供key

  如果你需要提供你自己的IRule实现来处理一个特殊的路由需求,比如一个canary 测试,你可能想传递一些信息给IRule的选择方法。

com.netflix.loadbalancer.IRule.java. 

public interface IRule{
public Server choose(Object key);
:

您可以通过如下的IRule实现提供一些用于选择目标服务器的信息:

RequestContext.getCurrentContext()
.set(FilterConstants.LOAD_BALANCER_KEY, "canary-test");

如果使用关键字FilterConstants.LOAD_BALANCER_KEY将任何对象放入RequestContext中,它将传递给IRule实现的选择方法。以上代码必须在执行RibbonRoutingFilter之前执行,并且Zuul的预过滤器是执行此操作的最佳位置。您可以通过预过滤器中的RequestContext轻松访问HTTP标头和查询参数,因此可以用它来确定将传递给功能区的LOAD_BALANCER_KEY。如果您在RequestContext中没有使用LOAD_BALANCER_KEY值,则会将null作为choose方法的参数传递。

0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用的更多相关文章

  1. 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client

    一.官方文档解读 官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_cust ...

  2. 0403-服务注册与发现-客户端负载均衡-Ribbon的基本使用

    一.概述 问题1.上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码.即电影微服务调用用户微服务 问题2.用户微服务多个节点,调用服务方如何负载均衡 二.实现负载均衡方式 2.1. ...

  3. springboot10-springcloud-eureka 服务注册与发现,负载均衡客户端(ribbon,feign)调用

    创建5个项目: 1.服务注册中心 2.服务提供者1 3.服务提供者2(与服务提供者1的代码实现一样,这是是为了模拟负载均衡) 4.ribbon客户端项目 5.feign客户端项目 如图: 一.注册中心 ...

  4. 客户端负载均衡框架:Spring Cloud Ribbon

    最近在学习Spring Cloud的知识,现将客户端负载均衡框架 Spring Cloud Ribbon 的相关知识笔记整理如下.[采用 oneNote格式排版]

  5. grpc的服务注册与发现及负载

    参考文章: (1)https://segmentfault.com/a/1190000008672912 (2)https://grpc.io/docs/ (3)https://github.com/ ...

  6. 基于gRPC的注册发现与负载均衡的原理和实战

    gRPC是一个现代的.高性能.开源的和语言无关的通用RPC框架,基于HTTP2协议设计,序列化使用PB(Protocol Buffer),PB是一种语言无关的高性能序列化框架,基于HTTP2+PB保证 ...

  7. Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon

    客户端负载均衡:Spring Cloud Ribbon 一.负载均衡概念 负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容.因为负载均衡对系统的高可用性. 网络压力的缓解和处理能力的扩容的 ...

  8. 客户端负载均衡Feign之一:申明式服务调用Feign入门示例

    Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡. 前面使用了Ribbon做客户端负载均衡,使用Hystrix做容错保护,这两者被作为基础工具类框架被广泛地应用在各个微服务的 ...

  9. 笔记:Spring Cloud Ribbon 客户端负载均衡

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...

随机推荐

  1. poj 2601 Simple calculations

    Simple calculations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6559   Accepted: 32 ...

  2. centos 7 查看修改时区

    查看时区 date -R 修改时区 # timedatectl list-timezones # 列出所有时区 # timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时 ...

  3. 指尖上的电商---(8)Solr中Facet的使用方法

    在大型电子商务站点中,在商品列表页,我们都能够看到商品按分类,品牌,价格的分类显示,例如以下图,这些我们能够使用solr中的facet功能实现. facet的基本功能就是对搜索结果中的商品进行分类. ...

  4. DevStore开发人员服务有奖征文:小谈新浪微博开放平台

    DevStore开发人员服务有奖征文:小谈新浪微博开放平台 笔者接入新浪微博开发平台也有一段时间了,对整个平台的接入也算比較熟悉,新浪提供了统一的API接口,能够让开发人员更方便的使用API来实现自己 ...

  5. Atitit.java 反编译 工具  attilax 总结

    Atitit.java 反编译 工具  attilax 总结 1. 三大核心核心引擎——1 2. JAD  Jad  attitude推荐这个1 2.1. Jdec.2 2.2. 二. 源码开放的 J ...

  6. 设备模型的基础---kobject,kset

    设备模型的基础是kobject,kset,kobj_type.kobject本身并没有什么意义,真正有用的地方在于嵌入了kobject的结构体(对象),kobject可以看成是一个最小单元,sysfs ...

  7. redhat5.8下oracle11g启动失败

    # redhat5.8下oracle11g启动失败 ### 日志文件路径-----------------------------tail -f /u01/app/oracle/product/11. ...

  8. JBoss高危漏洞分析

    前言 JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用:JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1.EJB 2.0和EJB3规 ...

  9. 【转载】使用SoapUI 测试Web Service

    转载地址:使用SoapUI 测试Web Service   如何测试写好的Webservice?你当然可以写代码来测试,但还是太麻烦,你得花时间去学习各语言的关于Webservice调用的相关API. ...

  10. shell脚本中多命令单行执行_转

    多命令一起执行 如果希望把几个命令合在一起执行, shell提供了两种方法.既可以在当前shell也可以在子shell中执行一组命令. 对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的 ...