上一文的代码 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. golang在win10安装、环境配置 和 goland开发工具golang配置 及Terminal的git配置

    前言 本人在使用goland软件开发go时,对于goland软件配置网上资料少,为了方便自己遗忘.也为了希望和我一样的小白能够更好的使用,所以就写下这篇博客,废话不多说开搞. 一.查看自己电脑系统版本 ...

  2. STM32CUBEIDE中 Debug 和 Release 的作用/区别/使用场景

    基本主流IDE都有该功能选项例如Keil MDK, IAR, Eclipse, VS等, 这里使用STM32CUBEIDE来举例 创建STM32CUBEIDE工程后默认有2个目标选项 Debug / ...

  3. 基础练习:FJ的字符串

    问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...

  4. MySQL - Plugin 'InnoDB' registration as a STORAGE ENGINE failed 错误处理

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin Plugin 'InnoDB' registration as a STORAGE ENGINE failed,从详细 ...

  5. 从ClickHouse通往MySQL的几条道路

    一.应用背景简介 ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍.ClickHouse ...

  6. Socket是什么/怎么理解Socket

    Socket 先来看一下百度百科对于Socket的介绍:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O ...

  7. [cnn]FashionMINST训练+保存模型+调用模型判断给定图片

    import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim impor ...

  8. [NOI online2022普及C]字符串

    题目描述 Kri 非常喜欢字符串,所以他准备找 \(t\) 组字符串研究. 第 \(i\) 次研究中,Kri 准备了两个字符串 \(S\) 和\(R\) ,其中 \(S\) 长度为 \(n\),且只由 ...

  9. “古剑山”第一届全国大学生网络攻防大赛-Crtpto | Misc WP

    Crypto babyRSA 题目信息 p=105570604806073931560404187362816308950408774915960751676958845800335871518600 ...

  10. Cocos2d-js 游戏切后台和返回游戏,系统监听事件

    在日常游戏开发中,我们会发现,实时类操作的游戏,在模拟器中切后台,然后切回游戏,会出现很多异常. 很幸运,Cocos官方已经为我们预留了接口 1 LogicGame.addSystemListener ...