一、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. destoon二次开发基础指南

    代码首先包含common.inc.php文件 在common.inc.php文件中,首先定义常量. define('IN_DESTOON', true); define('IN_ADMIN', def ...

  2. asp.net mvc 4多级area实现技巧

    今天在工作要实现这个多级area.其原因是这个项目需要多级的功能,大的类别里有小的类别,小的类别里有具体的功能项,每一个功能项还有若干动作Action,所以在菜单和mvc工程的结构上都需要有体现多级的 ...

  3. C/C++中,空数组、空类、类中空数组的解析及其作用

    转自:http://blog.sina.com.cn/s/blog_93b45b0f01015s95.html 我们经常会遇到这些问题: (1)C++中定义一个空类,他们它的大小(sizeof) 为多 ...

  4. 生产环境中 Ngx_lua 使用技巧和应用的范例

    生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...

  5. c++ 请抛弃匈牙利命名法 - 变量命名代码风格的建议。

    我只针对c++码农们讲,其他语言不了解不过应该大同小异.曾几何时翻开21天学通c++系列等脑残入门书,都以匈牙利命名法示人(DWORD dwXXX, int nXXX, string strXXX). ...

  6. Power Network - poj 1459 (最大流 Edmonds-Karp算法)

      Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 24788   Accepted: 12922 Description A ...

  7. Easyui 基于kindeditor的扩展

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

  8. linux和pycharm下终端彩色打印输出

    实际上linux终端是调用ANSI控制码来实现终端彩色输出.终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关. 转义序列以控制字符'ESC'开 ...

  9. 第一百九十节,jQuery,编辑器插件

    jQuery,编辑器插件 学习要点: 1.编辑器简介 2.引入 uEditor 编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML 格式的.分类纯 JS 类型 ...

  10. Vmware私有云虚拟机(CentOS 6.5 OS)之根分区扩容

    注:适用于未使用lvm管理的分区,目前仅在CentOS 6.5 上操作,其他系统尚未测试,请谨慎操作 一.查看当前分区状况 [root@disk-test ~]# df -h Filesystem   ...