業務場景:由於多個業務系統都實現了同一個服務,在調用中通過讀取相關配置可以知道此次調用是限制請求到哪幾個服務提供者上,而不是所有提供者中任取一個,這個就需要在dubbo上自定義自己的路由規則。
具體做法:實現Router接口,重寫route方法,從注冊中心所有服務提供者列表中選出符合規范的提供者列表並返回即可。
public class LimitIpRouter implements Router{ private final static Logger logger = LogManager.getLogger(LimitIpRouter.class); @Override public List<Provider> route(Invocation invocation, List<Provider> providers) { providers.stream().forEach(provider -> logger.info("provider:"+provider.toUrl())); //獲取參數中的限制ip列表 String limitIps = getLimitIps(invocation); return providers.stream().filter(provider -> StringUtils.contains(limitIps, provider.getIp())).collect(Collectors.toList()); } }
同樣,基於 SPI 機制, 需要添加 configfile
sgpScriptRouter=com.mobanker.sgpagent.client.dubbo.router.SgpScriptRouterFactory
