0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用
一、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使用的更多相关文章
- 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client
一.官方文档解读 官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_cust ...
- 0403-服务注册与发现-客户端负载均衡-Ribbon的基本使用
一.概述 问题1.上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码.即电影微服务调用用户微服务 问题2.用户微服务多个节点,调用服务方如何负载均衡 二.实现负载均衡方式 2.1. ...
- springboot10-springcloud-eureka 服务注册与发现,负载均衡客户端(ribbon,feign)调用
创建5个项目: 1.服务注册中心 2.服务提供者1 3.服务提供者2(与服务提供者1的代码实现一样,这是是为了模拟负载均衡) 4.ribbon客户端项目 5.feign客户端项目 如图: 一.注册中心 ...
- 客户端负载均衡框架:Spring Cloud Ribbon
最近在学习Spring Cloud的知识,现将客户端负载均衡框架 Spring Cloud Ribbon 的相关知识笔记整理如下.[采用 oneNote格式排版]
- grpc的服务注册与发现及负载
参考文章: (1)https://segmentfault.com/a/1190000008672912 (2)https://grpc.io/docs/ (3)https://github.com/ ...
- 基于gRPC的注册发现与负载均衡的原理和实战
gRPC是一个现代的.高性能.开源的和语言无关的通用RPC框架,基于HTTP2协议设计,序列化使用PB(Protocol Buffer),PB是一种语言无关的高性能序列化框架,基于HTTP2+PB保证 ...
- Spring Cloud微服务笔记(四)客户端负载均衡:Spring Cloud Ribbon
客户端负载均衡:Spring Cloud Ribbon 一.负载均衡概念 负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容.因为负载均衡对系统的高可用性. 网络压力的缓解和处理能力的扩容的 ...
- 客户端负载均衡Feign之一:申明式服务调用Feign入门示例
Spring Cloud提供了Ribbon和Feign作为客户端的负载均衡. 前面使用了Ribbon做客户端负载均衡,使用Hystrix做容错保护,这两者被作为基础工具类框架被广泛地应用在各个微服务的 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
随机推荐
- 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
>>>点击网址后,应用层的DNS协议会将网址解析为IP地址: DNS查找过程: 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束. 如果用户 ...
- seo-mask -- 为单页应用创建一个适合蜘蛛爬取的seo网站
seo-mask seo-mask是利用搜索引擎蜘蛛的爬取原理(蜘蛛只会爬取网页的内容,并不会关心解析网页里的css和js),制作一套专门针对seo的镜像网站,鄙人称它为针对seo的mask,让蜘蛛看 ...
- C# Activator.CreateInstance 动态创建类的实例(一)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Nginx https加密以及nginx日志配置与管理
Nginx https加密以及nginx日志配置与管理 使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件.索引文件.自动索引的效率非常高.Nginx作为代理服务器,Nginx可以 ...
- 微信小程序新建项目完整流程
最近刚好也在做新的小程序项目,所以有机会给大家整理一个完整的开发流程! 上一篇介绍是如何获得appid,那么接下来就是怎么新建一个全新的小程序项目了 首先:下载最新版的微信开发者工具,支持网页版微信开 ...
- mysql之replicate_do_table/replicate_ingore_table/replicate_wide_do_table/replicate_wide_ingore_table
参考:http://yhqlzz.blog.51cto.com/2557314/1159084/ mysql官网:http://dev.mysql.com/doc/refman/5.1/en/repl ...
- AES中几种加密模式的区别:ECB、CBC、CFB、OFB、CTR
AES: aes是基于数据块的加密方式,也就是说,每次处理的数据时一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度 分组加密的几种 ...
- python 循环结构
for循环 list或tuple可以表示一个有序集合.如果我们想依次访问一个list中的每一个元素呢?比如 list: L = ['Adam', 'Lisa', 'Bart'] print L[0] ...
- oracle 数据查询
1,读取从今天到1个月前之间的数据select * from tablewhere column between add_months(sysdate, -1) and sysdate;
- linux嵌入式大神的博客文章---持续更新中
linux kernel子系统相关博客:http://www.wowotech.net/ 经典博文: http://blog.csdn.net/zqixiao_09 http://blog.china ...