SpringCloud Ribbon(三)之IPing机制

一、IPing机制

IPing是一个主动探测服务节点存活的机制,通过判断服务节点的当前状态,设置节点的可用状态。只有当节点为可用时候才会作为负载均衡器的选取节点。

IPing有以下几种模式:

  • DummyPing:默认返回true,即认为所有节点都可用,这也是单独使用Ribbon时的默认模式
  • NIWSDiscoveryPing:借助Eureka服务发现机制获取节点状态。节点状态是UP,则认为是可用状态
  • PingUrl:主动向服务节点发起一次http调用,对方有响应则认为节点是可用状态
  • NoOpPing:返回true
  • PingConstant:返回设置的常量值

 

二、IPing配置

(1)application.yaml配置

#单个服务设置
[service-name]: ribbon: NFLoadBalancerPingClassName: com.netflix.loadbalancer.DummyPing

(2)代码配置

public class MicroRibbonConfig {@Beanpublic IPing microIPing(){return new DummyPing();}
}@RibbonClient(name = "micro-service", configuration = MicroRibbonConfig.class)
public class RibbonClientConfig {}

 

三、IPing模式实现

(1)DummyPing

public class DummyPing extends AbstractLoadBalancerPing {public DummyPing() {}public boolean isAlive(Server server) {return true;}@Overridepublic void initWithNiwsConfig(IClientConfig clientConfig) {}
}public abstract class AbstractLoadBalancerPing implements IPing, IClientConfigAware{AbstractLoadBalancer lb;@Overridepublic boolean isAlive(Server server) {return true;}public void setLoadBalancer(AbstractLoadBalancer lb){this.lb = lb;}public AbstractLoadBalancer getLoadBalancer(){return lb;}}

(2)PingUrl

public class PingUrl implements IPing {private static final Logger LOGGER = LoggerFactory.getLogger(PingUrl.class);String pingAppendString = "";boolean isSecure = false;String expectedContent = null;/*** Send one ping only.** Well, send what you need to determine whether or not the* server is still alive.  Should return within a "reasonable"* time.*/public PingUrl() {}public PingUrl(boolean isSecure, String pingAppendString) {this.isSecure = isSecure;this.pingAppendString = (pingAppendString != null) ? pingAppendString : "";}public void setPingAppendString(String pingAppendString) {this.pingAppendString = (pingAppendString != null) ? pingAppendString : "";}public String getPingAppendString() {return pingAppendString;}public boolean isSecure() {return isSecure;}/*** Should the Secure protocol be used to Ping* @param isSecure*/public void setSecure(boolean isSecure) {this.isSecure = isSecure;}public String getExpectedContent() {return expectedContent;}/*** Is there a particular content you are hoping to see?* If so -set this here.* for e.g. the WCS server sets the content body to be 'true'* Please be advised that this content should match the actual * content exactly for this to work. Else yo may get false status.* @param expectedContent*/public void setExpectedContent(String expectedContent) {this.expectedContent = expectedContent;}public boolean isAlive(Server server) {String urlStr   = "";if (isSecure){urlStr = "https://";}else{urlStr = "http://";}urlStr += server.getId();urlStr += getPingAppendString();boolean isAlive = false;HttpClient httpClient = new DefaultHttpClient();HttpUriRequest getRequest = new HttpGet(urlStr);String content=null;try {HttpResponse response = httpClient.execute(getRequest);content = EntityUtils.toString(response.getEntity());isAlive = (response.getStatusLine().getStatusCode() == 200);if (getExpectedContent()!=null){LOGGER.debug("content:" + content);if (content == null){isAlive = false;}else{if (content.equals(getExpectedContent())){isAlive = true;}else{isAlive = false;}}}} catch (IOException e) {e.printStackTrace();}finally{// Release the connection.getRequest.abort();}return isAlive;}public static void main(String[] args){PingUrl p = new PingUrl(false,"/cs/hostRunning");p.setExpectedContent("true");Server s = new Server("ec2-75-101-231-85.compute-1.amazonaws.com", 7101);boolean isAlive = p.isAlive(s);System.out.println("isAlive:" + isAlive);}
}

(3)PingConstant 

public class PingConstant implements IPing {boolean constant = true;public void setConstant(String constantStr) {constant = (constantStr != null) && (constantStr.toLowerCase().equals("true"));}public void setConstant(boolean constant) {this.constant = constant;}public boolean getConstant() {return constant;}public boolean isAlive(Server server) {return constant;}
}

(4)NoOpPing

public class NoOpPing implements IPing {@Overridepublic boolean isAlive(Server server) {return true;}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core使用swagger进行API接口文档管理

一、问题背景随着技术的发展,现在的开发模式已经更多的转向了前后端分离的模式,在前后端开发的过程中,联系的方式也变成了API接口,但是目前项目中对于API的管理很多时候还是通过手工编写文档,每次的需求变更只要涉及到…

.NET下使用socket.io随笔记录

一、问题背景目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是给自己增加增长见闻,由于我是做后端以及桌面…

SpringCloud Ribbon(五)之服务实例列表ServerList

一、服务实例列表ServerList 服务实例列表(ServerList)为负载均衡器(Loadbalancer)提供服务的可用实例列表。 负载均衡器(Loadbalancer)通过服务实例列表(ServerList)从注册中心&a…

超级简便的容器化部署工具(使用 ASP.NET Core 演示)

Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了。不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI、CD。本文即将介绍的…

学习手记(2019/7/05~2019/8/31)——快乐暑假

文章目录二分答案的作用堆和区间很糙ddp线段树合并网络流结论の1树上莫队对角线与GCD区间与扫描线与方案数欧拉欧拉*1斯坦纳树切比雪夫距离二分匹配结论の1min-max容斥计算几何の -1二分答案的作用 求最大值最小ororor最小值最大将求值问题转换为判断问题在判断问题之间相互转…

SpringCloud Ribbon(六)之服务实例过滤器ServerListFilter

一、服务实例过滤器ServerListFilter 服务实例过滤器(ServerListFilter)为负载均衡器(Loadbalancer)提供从服务实例列表(ServerList)获取的服务实例过滤出符合要求的服务实例。 负载均衡器(Lo…

听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider

前言.NET平台的开发一直都只能使用Visual Studio来开发,自从dotnet core 发布后不久,jetbrains 发布了Rider预览版,到目前为止的正式版2017.3.1。博主都使用过,因为博主的主力开发语言是C#,所以一直以来被捆绑到Window…

给Ocelot做一个Docker 镜像

写在前面在微服务架构中,ApiGateway起到了承前启后,不仅可以根据客户端进行分类,也可以根据功能业务进行分类,而且对于服务调用服务也起到了很好的接口作用。目前在各个云端中,基本上都提供了ApiGateway的功能&#xf…

.NET Core UI框架Avalonia

.NET Core UI框架Avalonia,Avalonia是一个基于WPF XAML的跨平台UI框架,并支持多种操作系统:Windows(.NET Framework,.NET Core),Linux(GTK),MacOS&#xff0c…

揽货最短路径解决方案算法 - C# 蚁群优化算法实现

需求为(自己编的,非实际项目):某配送中心进行揽货,目标客户数为50个客户,配送中心目前的运力资源如下:现有车辆5台单台运力最大行驶距离200千米单台运力最大载重公斤1吨问:运力怎样走…

OIDC在 ASP.NET Core中的应用

我们在《ASP.NET Core项目实战的课程》第一章里面给identity server4做了一个全面的介绍和示例的练习 。如果想完全理解本文所涉及到的话题,你需要了解的背景知识有:什么是OpenId Connect (OIDC)OIDC 对oAuth进行了哪些扩展?Identity Server4…

论文阅读:Blind Super-Resolution Kernel Estimation using an Internal-GAN

这是发表在 2019 年 NIPS 上的一篇文章,那个时候还叫 NIPS,现在已经改名为 NeurIPS 了。文章中的其中一个作者 Michal Irani 是以色 Weizmann Institute of Science (魏茨曼科学研究学院) 的一名教授,对图像纹理的内在统计规律有着很深入的研…

【ASP.NET Core】处理异常

依照老周的良好作风,开始之前先说点题外话。前面的博文中,老周介绍过自定义 MVC 视图的搜索路径,即向 ViewLocationFormats 列表添加相应的内容,其实,对 Razor Page 模型,也可以向 PageViewLocationFormats…

树莓派3B上部署运行.net core 2程序

针对Linxu arm处理器如何部署.net core 2的资料很少,网上找到几篇但都写得不够详细,按照他们教程来撞墙了,折磨了几天终于部署成功了,先上一张运行成功的图1.windows系统中,在项目的目录下使用CMD命令运行进行发布dotn…

拥抱.NET Core系列:MemoryCache 初识

MSCache能做什么?绝对过期支持滑动过期支持(指定一个时间,TimeSpan,指定时间内有被Get缓存时间则顺延,否则过期)过期回调自定义过期MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,…

Spark Structure Streaming(一)之简介

一、Structure Streaming 结构化流是基于Spark SQL引擎构建的可伸缩且容错的流处理引擎。可以像对静态数据进行批处理计算一样,来表示流计算。 当流数据继续到达时,Spark SQL引擎将负责递增地,连续地运行它并更新最终结果。可以在Scala&…

Ocelot中使用Butterfly实践

Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core实现的全程序跟踪,现在,Ocelot中可以使用Butterfly了,关于Ocelot和Butterfl…

jzoj6290-倾斜的线【计算几何,贪心】

正题 题目大意 有nnn个点,将两个点连成线,求斜率最接近PQ\frac{P}{Q}QP​的线。 解题思路 我们有一个结论:若我们对于每一个点做一条斜率为PQ\frac{P}{Q}QP​的线,然后按截距排序,然后答案必定是相邻的点。 证明: 我…

Java 平台调试架构JPDA

转载自 Java-JPDA 概述 JPDA:Java 平台调试架构(Java Platform Debugger Architecture) 它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接口。 一、JPDA https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/ JPDA 由三个…

Ocelot + Consul实践

关于Consul(https://www.consul.io)是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 在Consul的文档上,Consul 支持Service Discovery, Health …