分享会上演示Dubbo的路由规则,结果被小坑了下
今天公司给大家演示基于Dubbox的服务治理平台,结果因为开了vpn导致本机IP地址比较混乱,在配置路由规则的时候我这样配置条件路由
consumer.host=*.*.*.* => provider.host=192.168.1.2
结果不生效,查阅代码才发现是用一个 * 号来代表所有ip,代码如下:
public static boolean isMatchGlobPattern(String pattern, String value) { if ("*".equals(pattern)) return true; if((pattern == null || pattern.length() == 0) && (value == null || value.length() == 0)) return true; if((pattern == null || pattern.length() == 0) || (value == null || value.length() == 0)) return false; int i = pattern.lastIndexOf('*'); // 没有找到星号 if(i == -1) { return value.equals(pattern); } // 星号在末尾 else if (i == pattern.length() - 1) { return value.startsWith(pattern.substring(0, i)); } // 星号的开头 else if (i == 0) { return value.endsWith(pattern.substring(i + 1)); } // 星号的字符串的中间 else { String prefix = pattern.substring(0, i); String suffix = pattern.substring(i + 1); return value.startsWith(prefix) && value.endsWith(suffix); } }
看这段代码,估计以后只能进行一个网段的匹配了,还好公司的各个服务都有自己的ip段,只是演示的时候略尴尬,CTO正好听了这段演示一会,走了……
正确的路由规则参数 consumer.host=192.168.1.* => provider.host=192.168.1.2 ,Dubbo还有不少需要改进的地方啊。