一、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-3134-Power Calculus(迭代加深DFS)

    Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multipli ...

  2. chrome 一进入调试页面就会自己主动打断点

    近期在用chrome调试页面时.一刷新页面总会自己主动打断点.自己鼓捣了一下,发现 把它改为这个样子的时候就能够解决问题,即把调试面板上的第5个button从Deactivate breakpoint ...

  3. Java Web返回JSON

    Web项目中经常涉及到AJAX请求返回JSON和JSONP数据.JSON数据在server端和浏览器端传输,本质上就是传输字符串,只是这个字符串符合JSON语法格式.浏览器端会依照普通文本的格式接收J ...

  4. Mat::operator =

    Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) C++: Mat& M ...

  5. 基于AFNetworking的网络判断【原创】

    首先导入AFNetworking第三方框架,然后将下面的.h和.m放在你新建的类中便可 GGNetworkJudge.h   在最后会有Singleton.h头文件代码 #import <Fou ...

  6. scala 学习(三)——Array和ArrayBuffer

    ArrayBuffer:类型化数组 首先需要注意的是Array是定长数组,而ArrayBuffer是可变数组.下面是一个小例子,对数据进行便利和修改的操作.

  7. 华为终端开放实验室Android Beta 4测试能力上线

    ​​​7月26日,Android P Beta 4发布(即Android P DP5),此版本为开发者最后一个预览版本,也预示着Android P正式版即将与大家见面. 为保证开发者在正式版本来临前做 ...

  8. E - Leading and Trailing 求n^k得前三位数字以及后三位数字,保证一定至少存在六位。

    /** 题目:E - Leading and Trailing 链接:https://vjudge.net/contest/154246#problem/E 题意:求n^k得前三位数字以及后三位数字, ...

  9. MAC信息摘要

    MAC(Message Authentication Code ,消息认证码算法)是含有密钥散列函数算法,兼容MD和SHA算法的特性,并在此基础上加入了密钥.因此,MAC也称为HMAC.       ...

  10. 探讨电子商务新的商业模式O2O

    在当前的市场经济大环境下,电子商务成为了众 多中小企业用以开拓市场的主要工具,成为突破企业管理瓶颈的重要手段.必卖电子商务顾问认为,电子商务应该是是线上业务与线下业务的结合.对于从线下渠道 起家的传统 ...