【7】JMicro微服务-服务路由,负载均衡
如非授权,禁止用于商业用途,转载请注明出处
作者:mynewworldyyl
1。关于服务路由和负载均衡
服务路由:根据预先配置好的策略,为客户端选择一个当前可用的服务提供者,根据策略选择一个可用的服务即可。
负载均衡:在当前可用的服务中,为客户端选择一个最合适的服务提供者,重点在公平地选一个最合适的,。
所以负载均衡是路由的进一步筛选,查看org.jmicro.client.RoundBalance源码,就是这么做的。
2. 目前JMicro提供四种路由实现
IP路由:根据请求客户端IP查找路由规则,将源IP的请求导到指定IP的服务上;
标签路由:根据请求上下文是否包含某个值查找路由规则,并将请求导到指定的IP的服务上;
服务路由:根据请求的服务名称空间,服务名称,服务版本,服务方法查找路由规则,将请求导到指定IP的服务上;
默认路由:根据IP,标签,服务依次过虑规则,最终找到唯一规则并导到指定IP的服务上。
3. 配置路由规则
3.1 配置IP路由规则:
ZKUI进入/jmicro/routeRules,新建属性如下图

名称可以任意取,不重复就行,值如下所示
{"type":"sourceIpPortMatch2IpPort", //IP路由规则固定值"id":"TestIpRoute", //同种类型规则不能重复"from":{"ipPort":"192.168.1.102"},//源IP,也就是客户端IP"to":{"ipPort":"192.168.1.103:2999"},//目的IP"enable":true,//启用规则"priority":1000}//优先级,如有多个规则,值越小,优先级越高
以上配置规则表示192.168.1.102的请求全部路由到192.168.1.103:2999服务上,端口可选。
3.2 配置标签路由规则
操作方式与3.1相同,值如下
{"type":"contextParamMatch2IpPort","id":"TestTagRoute","from":{"tagKey":"routerTag",//上下文标签KEY"tagVal":"tagValue"//上下文标签KEY下的值
},
"to":{"ipPort":"172.16.22.7:3333"},//目的IP
"enable":true,"priority":1003}
以上规则的意思是:如果请求上下文包含routerTag="tagValue",客户端请求被路由到172.16.22.7:3333的服务上
3.3 配置服务路由规则
操作方式与3.1相同,值如下
{"type":"clientServiceMatch2IpPort","id":"TestServiceRoute",
"from":{"serviceName":"org.jmicro.example.api.ITestRpcService","namespace":"testrpc","version":"0.0.1","method":"getPerson"},//对这个服务的全部请求
"to":{"ipPort":"192.168.1.102"},//目的IP
"enable":true,"priority":1001}
以上规则的意思是对org.jmicro.example.api.ITestRpcService:testrpc:0.0.1:getPerson服务的请求,全部路由到192.168.1.102的服务上
4. 测试
4.1 先启动几个Provider实例,记下IP及对应的端口,并配置到以上的规则目标(to属性)里面。
4.2 根据本机IP的配置from值,测试IP路由
4.3 标签路由,代码如下
public static void main(String[] args) {
IObjectFactory of = JMicro.getObjectFactoryAndStart(new String[]{""});
JMicroContext.get().setParam("routerTag", "tagValue");//设置上下文标签,匹配from对应属性
//got remote service from object factory
ISimpleRpc src = of.get(ISimpleRpc.class);
//invoke remote service
System.out.println(src.hello("Hello JMicro"));
}
4.4 服务路由
后面了解Jmicro服务标识相关概念以后再进一步说明怎么做这个测试
【7】JMicro微服务-服务路由,负载均衡的更多相关文章
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡
本文源码:GitHub·点这里 || GitEE·点这里 一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TC ...
- 服务发现与负载均衡 dubbo zk原理
服务发现与负载均衡 拓展阅读 : dubbo 原理概念图 2016-03-03 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 内容整理自文章“实施 ...
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- Kubernetes 中的服务发现与负载均衡
原文:https://www.infoq.cn/article/rEzx9X598W60svbli9aK (本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)) 一.需求来源 为 ...
- 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- grpc服务发现与负载均衡
前言 在后台服务开发中,高可用性是构建中核心且重要的一环.服务发现(Service discovery)和负载均衡(Load Balance)一直都是我关注的话题.今天来谈一下我在实际中是如何理解及落 ...
- kubernetes云平台管理实战: 服务发现和负载均衡(五)
一.rc控制器常用命令 1.rc控制器信息查看 [root@k8s-master ~]# kubectl get replicationcontroller NAME DESIRED CURRENT ...
- Consul + fabio 实现自动服务发现、负载均衡 - DockOne.io
Consul + fabio 实现自动服务发现.负载均衡 - DockOne.io http://dockone.io/article/1567
随机推荐
- 由已打开的文件读取数据---read
头文件:#include<unistd.h> 函数原型:ssize_t read(int fd,void *buf,size_t count); 参数说明:fd:文件描述符 buf:存放读 ...
- 第二篇博客 wordcount
1.首先 附上Github项目地址:https://github.com/June1104/WordCount 2.psp表格 PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 ...
- python数据类型2
一 文件格式补充 在python3中,除字符串外,所有数据类型在内存中的编码格式都是utf-8,而字符串在内存中的格式是Unicode的格式. 由于Unicode的格式无法存入硬盘中,所以这里还有一种 ...
- 2018.07.30 bzoj4355: Play with sequence(线段树)
传送门 维护区间覆盖成非负数,区间变成max(xi+a,0)" role="presentation" style="position: relative;&q ...
- winform 按键控制
用ADSW来控制前后左右,J表示开火,J不能连续按 _+表示速度档位. DateTime _LastPress = DateTime.MinValue; Keys _PrevKey = Keys.No ...
- js,java,jstl多分隔符分割字符串
1.js多分隔符 分割字符串 var username = “zhao,li;wang.liu”: var arr = str.split(/;|:|,|,|./); 括号里面可以写多分割符号,中英 ...
- Oracle零碎总结:结构-工具-创建语句
前言:Oracle内部的存储及管理结构是1.数据库系统:2.数据库实例:3.表空间,系统用户system,普通用户:表,视图,触发器,存储过程等: 一.Oracle数据库系统和数据库实例的对应关系是一 ...
- TableView编辑状态下跳转页面的崩溃处理
29down votefavorite 12 I have a viewController with a UITableView, the rows of which I allow to edit ...
- STL中的内存与效率
STL中的内存与效率 1. 使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下. 关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足 ...
- java中如何通过Class获取类的属性、方法、注释
public static String getPKName(Class clazz) { Field[] fields = clazz.getDeclaredFields(); for (Field ...