一、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. 基于RocketIO的高速串行协议设计与实现

    随着对信息流量需求的不断增长, 传统并行接口技术成为进一步提高数据传输速率的瓶颈.过去主要用于光纤通信的串行通信技术—SERDES正在取代传统并行总线而成为高速接口技术的主流.SERDES 是串行器) ...

  2. 4.const

    const 放在*号的左边为指针常量,即:该指针所指向的内存空间不允许被修改.const放在*号的右边为常量指针,即:该指针的指向不允许被修改. 简单的说就是: 假设定义一个结构体 Teacher : ...

  3. win10虚拟环境安装scrapy

    说明:本人用的是python3.6版本,64位系统. 第一步:创建并激活虚拟环境 virtualenv scrapy scrapy\Scripts\activate 第二步:安装lxml pip in ...

  4. 李洪强漫谈iOS开发[C语言-003]-开发概述程序设计语言

    李洪强iOS开发之程序设计语言 printf 是打印的意思- 格式化输出 f: format 格式化 C语言编译器 编译器的功能就是将高级语言的源代码,翻译成机器可以识别的二进制文件就是可执 行文件- ...

  5. java - day08 - PrimeNumLoop

    质数循环查找 package day07_addition; //范围查找质数 public class PrimeNumLoop { public static void main(String[] ...

  6. hdu5800 To My Girlfriend dp 需要比较扎实的dp基础。

    To My Girlfriend Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. Easyui 基于kindeditor的扩展

    源码 /** * Author : ____′↘夏悸 * Easyui KindEditor的简单扩展. * 有了这个之后,你就可以像使用Easyui组件的方式使用KindEditor了 * 前提是你 ...

  8. YII安装步骤(windows)

    一.首先你得下个YII框架的源码 :下载地址:http://www.yiiframework.com/download/ 二.把下载到的源码解压放到一个PHP可访问的位置:如我的 F:\site(已具 ...

  9. 第一百七十三节,jQuery,Ajax

    jQuery,Ajax 学习要点: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6 ...

  10. Spring MVC静态页面

    以下示例显示如何使用Spring MVC Framework编写一个简单的基于Web的应用程序,它可以使用<mvc:resources>标记访问静态页面和动态页面.首先使用Eclipse ...