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服务标识相关概念以后再进一步说明怎么做这个测试
原文地址:https://www.cnblogs.com/jmicro/p/10579919.html