上一文的代码 HttpUtils.http(sevName, ctx.path()) (来自 "solon.cloud.httputils" 插件的工具类),内部是通过 sevName 获取对应服务负载均衡,并最终获取服务实例地址。内部接口调用:

//根据服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(sevName); //根据分组和服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(groupName, sevName);

负载均衡是 Rpc 开发和服务集群调用时,必不可少的元素。

1、了解负载均衡

内核层面提供了两个接口。插件中 “solon.cloud.httputils”,“nami” 都是使用它们对服务进行调用:

接口 说明
LoadBalance 负载均衡接口
LoadBalance.Factory 负载均衡工厂接口

要获取一个服务的实例地址,只需要使用(在定制开发时,可能用得着):

//开发时要注意不存在服务的可能
LoadBalance loadBalance = LoadBalance.get(sevName);
//输出的结果,例:"http://12.0.1.2.3:8871" 、"ws://120.1.1.2:9871"(协议头://地址:端口)
String server = loadBalance.getServer();

2、负载均衡的能力实现

已有的实现方案是:"solon.cloud" 插件的 CloudLoadBalanceFactory。实现是无感知的,且是动态更新了(一般是实时或延时几秒)。引入 Solon Cloud Discovery 相关的组件,即可使用。

还可以根据需要,进行微略调整(一般没啥必要):

@Configuration
public class Config{
@Bean
public CloudLoadStrategy loadStrategy(){
return new CloudLoadStrategyDefault(); //默认为轮询
//return new CloudLoadStrategyIpHash(); //ip希哈
}
}

更多的策略,可以自己定义。比如在 k8s 里直接使用 k8s sev 地址:

//关于策略自定义,v2.2.6 后支持
@Component
public class CloudLoadStrategyImpl impl CloudLoadStrategy{
@Override
public String getServer(Discovery discovery){
//即通过服务名,获取k8s的服务地址
return K8sUtil.getServer(discovery.service());
}
}

3、自定义负载均衡实现

  • 基于内核接口 "LoadBalance.Factory" 实现(一般是没必要自己搞)
//只是示意一下 //具体可以参考 CloudLoadBalanceFactory 实现
@Component
public class LoadBalanceFactoryImpl implements LoadBalance.Factory{
@Override
public LoadBalance create(String group, String service){
if("local".equals(service)){
return LoadBalanceImpl();
}
}
} //只是示意一下 //具体可以参考 CloudLoadBalance 实现
public class LoadBalanceImpl implements LoadBalance{
@Override
public String getServer(){
return "http://127.0.0.1"
}
}
  • 基于 “Solon Cloud Discovery” 接口实现
//找一个 Solon Cloud Discovery 适配插件参考下
public class CloudDiscoveryServiceImpl implements CloudDiscoveryService{
...
}

Solon2 接口开发: 了解 LoadBalance的更多相关文章

  1. Solon2 接口开发: 强化 Gateway 模式

    一般可以从这几方面对 Gateway 模式进行强化: 定制异常状态码 定制基类 将一些处理独立封装成类 接口只返回数据部份,异常状态用抛 强化之后,具体的网关即简单,又功能强大.同时会对团队开发形成一 ...

  2. Solon2 接口开发: 分布式 Api Gateway 开发预览

    建议使用专业的分布式网关产品,比如: nginx apisix [推荐] k8s ingress controller 等... 对 Solon 来讲,只有 Gateway:它调用本地接口时,则为本地 ...

  3. 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  4. 《Python Web 接口开发与测试》---即将出版

    为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...

  5. 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载

    转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...

  6. 支付宝WAP支付接口开发(Node/Coffee语言)

    此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...

  7. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  8. C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询

    前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...

  9. C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  10. APP数据接口开发的一些经验

    刚接到这样的任务时,没有感觉到任何压力,不就是给移动端应用提供数据吗?那边发来参数,这边处理数据,返回JSON.做网站开发时经常使用ajax请求后台数据,不就是这么回事吗.于是,在确认完需求后就开始干 ...

随机推荐

  1. MySQL查看数据库性能常用命令和实战教学

    MySQL查看数据库性能常用命令 # 列出MySQL服务器运行各种状态值 show global status; # 查询MySQL服务器配置信息语句 show variables; # 慢查询 sh ...

  2. 🔥🔥TCP协议:三次握手、四次挥手,你真的了解吗?

    什么是TCP网络分层 应⽤层 应用层是网络协议栈中的最顶层,主要负责应用程序之间的通信.其中一种常见的应用层协议是HTTP协议,它定义了应用程序之间如何传递报文. 传输层 传输层是为两台主机之间的应用 ...

  3. [Python急救站课程]Hello Kitty的绘制

    我女朋友喜欢Hello Kitty,当她知道我会用Python画图,让我给画一个,怎么说呢,当然要安排上啦!请看程序 import math import turtle as t # 计算长度.角度 ...

  4. CSS 溢出overflow属性的使用

    作者:WangMin 格言:努力做好自己喜欢的每一件事 在CSS中,如果给一个盒子设置了固定的宽度与高度,但内容过多就会溢出盒子本身的宽度或高度.此时,就可以使用 overflow 属性来控制内容溢出 ...

  5. 2007年对Youtube小视频的分析文章

    Understanding the Characteristics of Internet Short Video Sharing: YouTube as a Case Study 视频的种类 该研究 ...

  6. 题解 AGC054D

    前言 因为本人尚菜,所以本篇文章没有什么数学符号,请大家放心食用. 题目分析 先吐槽一嘴,这个 o 表示 (),这个 x 表示 )(,十分形象. 好,我们先观察原序列,容易得出第一条性质: ox 的加 ...

  7. 用友vs金蝶产品分析(云星空与YonSuite)

    产品定位 用友与金蝶二者面对的客户群体是相同的:都是为成长型企业提供一体化服务,由于金蝶云星空发展较早,在部分产品功能上具备一定的先发优势:在产品的架构上,由于YS采用目前最先进的云原生和微服务架构, ...

  8. mac电脑升级后wifi报感叹号连不上WiFi的问题

    我的mac电脑是2015款的makebook pro,13英寸,之前一直用的是10.14系统,后来看到系统更新一直在推10.15系统,我就升级了10.15系统,但是升级后就坑爹了,wifi标志直接就不 ...

  9. 接收json数据

    1.导入坐标: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId& ...

  10. python操作mongodb副本集(mongodb高可用)

    https://pymongo.readthedocs.io/en/stable/examples/high_availability.html# pymongo比较"智能",只要 ...