public static void copyRegistryFields(com.alipay.sofa.rpc.config.RegistryConfig sofaRegistryConfig, com.alibaba.dubbo.config.RegistryConfig dubboRegistryConfig) { dubboRegistryConfig.setAddress(sofaRegistryConfig.getAddress()); dubboRegistryConfig.setProtocol(sofaRegistryConfig.getProtocol()); dubboRegistryConfig.setRegister(sofaRegistryConfig.isRegister()); dubboRegistryConfig.setSubscribe(sofaRegistryConfig.isSubscribe()); dubboRegistryConfig.setAddress(sofaRegistryConfig.getAddress()); dubboRegistryConfig.setTimeout(sofaRegistryConfig.getTimeout()); dubboRegistryConfig.setId(sofaRegistryConfig.getId()); dubboRegistryConfig.setParameters(sofaRegistryConfig.getParameters()); } }
return; String addressInput = registryConfig.getAddress(); // xxx:2181,yyy:2181/path1/paht2 if (StringUtils.isEmpty(addressInput)) { throw new SofaRpcRuntimeException("Address of zookeeper registry is empty."); rootPath = CONTEXT_SEP; preferLocalFile = !CommonUtils.isFalse(registryConfig.getParameter(PARAM_PREFER_LOCAL_FILE)); ephemeralNode = !CommonUtils.isFalse(registryConfig.getParameter(PARAM_CREATE_EPHEMERAL)); if (LOGGER.isInfoEnabled()) { LOGGER.info( CuratorFrameworkFactory.Builder zkClientuilder = CuratorFrameworkFactory.builder() .connectString(address) .sessionTimeoutMs(registryConfig.getConnectTimeout() * 3) .connectionTimeoutMs(registryConfig.getConnectTimeout()) .canBeReadOnly(false) .retryPolicy(retryPolicy)
this.regFile = registryConfig.getFile(); if (regFile == null) { throw new SofaRpcRuntimeException("File of LocalRegistry is null"); this.scanPeriod = CommonUtils.parseInt(registryConfig.getParameter("registry.local.scan.period"), scanPeriod); Runnable task = new Runnable() {
@Override public void register(ProviderConfig config) { String appName = config.getAppName(); if (!registryConfig.isRegister()) { if (LOGGER.isInfoEnabled(appName)) { LOGGER.infoWithApp(appName, LogCodes.getLog(LogCodes.INFO_REGISTRY_IGNORE)); } return; } //发布 if (config.isRegister()) { registerProviderUrls(config); } if (config.isSubscribe()) { // 订阅配置节点 if (!INTERFACE_CONFIG_CACHE.containsKey(buildConfigPath(rootPath, config))) { //订阅接口级配置 subscribeConfig(config, config.getConfigListener()); } } }
@Override public void init() { synchronized (MeshRegistry.class) { if (!inited) { String address = registryConfig.getAddress(); client = new MeshApiClient(address); inited = true; } } }
@Override public void unSubscribe(ConsumerConfig config) { String appName = config.getAppName(); if (!registryConfig.isSubscribe()) { // 注册中心不订阅 if (LOGGER.isInfoEnabled(appName)) { LOGGER.infoWithApp(appName, LogCodes.getLog(LogCodes.INFO_REGISTRY_IGNORE)); } } // 注册Consumer节点 if (config.isRegister()) { // 向服务器端发送取消订阅请求 String url = ConsulRegistryHelper.convertConsumerToUrl(config); ConsulURL consulURL = ConsulURL.valueOf(url); consumerUrls.remove(config); notifyServiceListeners.remove(consulURL.getServiceKey()); } }
if (LOGGER.isWarnEnabled(appName)) { LOGGER.warnWithApp(appName, "Catch exception when subscribe from registry: " + registryConfig.getId() + ", but you can ignore if it's called by JVM shutdown hook", e);
@Override public boolean needToLoad(ConsumerBootstrap consumerBootstrap) { ConsumerConfig consumerConfig = consumerBootstrap.getConsumerConfig(); // 不是直连,且从注册中心订阅配置 final boolean isDirect = StringUtils.isNotBlank(consumerConfig.getDirectUrl()); final List<RegistryConfig> registrys = consumerConfig.getRegistry(); boolean isMesh = false; if (registrys != null) { for (RegistryConfig registry : registrys) { if (registry.getProtocol().equalsIgnoreCase(RpcConstants.REGISTRY_PROTOCOL_MESH)) { isMesh = true; break; } } } boolean isBolt = consumerConfig.getProtocol().equalsIgnoreCase(RpcConstants.PROTOCOL_TYPE_BOLT); return !isDirect && isMesh && isBolt; }
/** * 创建认证信息 * @return */ private List<AuthInfo> buildAuthInfo() { List<AuthInfo> info = new ArrayList<AuthInfo>(); String scheme = registryConfig.getParameter("scheme"); //如果存在多个认证信息,则在参数形式为为addAuth=user1:paasswd1,user2:passwd2 String addAuth = registryConfig.getParameter("addAuth"); if (StringUtils.isNotEmpty(addAuth)) { String[] addAuths = addAuth.split(","); for (String singleAuthInfo : addAuths) { info.add(new AuthInfo(scheme, singleAuthInfo.getBytes())); } } return info; } }
@Override public void register(ProviderConfig config) { String appName = config.getAppName(); if (!registryConfig.isRegister()) { if (LOGGER.isInfoEnabled(appName)) { LOGGER.infoWithApp(appName, LogCodes.getLog(LogCodes.INFO_REGISTRY_IGNORE)); } return; } //发布 if (config.isRegister()) { registerProviderUrls(config); } if (config.isSubscribe()) { // 订阅配置节点 if (!INTERFACE_CONFIG_CACHE.containsKey(buildConfigPath(rootPath, config))) { //订阅接口级配置 subscribeConfig(config, config.getConfigListener()); } } }
@Override public void init() { synchronized (MeshRegistry.class) { if (!inited) { String address = registryConfig.getAddress(); client = new MeshApiClient(address); inited = true; } } }
@Override public void unSubscribe(ConsumerConfig config) { String appName = config.getAppName(); if (!registryConfig.isSubscribe()) { // 注册中心不订阅 if (LOGGER.isInfoEnabled(appName)) { LOGGER.infoWithApp(appName, LogCodes.getLog(LogCodes.INFO_REGISTRY_IGNORE)); } } // 注册Consumer节点 if (config.isRegister()) { // 向服务器端发送取消订阅请求 String url = ConsulRegistryHelper.convertConsumerToUrl(config); ConsulURL consulURL = ConsulURL.valueOf(url); consumerUrls.remove(config); notifyServiceListeners.remove(consulURL.getServiceKey()); } }
if (LOGGER.isWarnEnabled(appName)) { LOGGER.warnWithApp(appName, "Catch exception when subscribe from registry: " + registryConfig.getId() + ", but you can ignore if it's called by JVM shutdown hook", e);
@Override public boolean needToLoad(ConsumerBootstrap consumerBootstrap) { ConsumerConfig consumerConfig = consumerBootstrap.getConsumerConfig(); // 不是直连,且从注册中心订阅配置 final boolean isDirect = StringUtils.isNotBlank(consumerConfig.getDirectUrl()); final List<RegistryConfig> registrys = consumerConfig.getRegistry(); boolean isMesh = false; if (registrys != null) { for (RegistryConfig registry : registrys) { if (registry.getProtocol().equalsIgnoreCase(RpcConstants.REGISTRY_PROTOCOL_MESH)) { isMesh = true; break; } } } boolean isBolt = consumerConfig.getProtocol().equalsIgnoreCase(RpcConstants.PROTOCOL_TYPE_BOLT); return !isDirect && isMesh && isBolt; }
/** * 创建认证信息 * @return */ private List<AuthInfo> buildAuthInfo() { List<AuthInfo> info = new ArrayList<AuthInfo>(); String scheme = registryConfig.getParameter("scheme"); //如果存在多个认证信息,则在参数形式为为addAuth=user1:paasswd1,user2:passwd2 String addAuth = registryConfig.getParameter("addAuth"); if (StringUtils.isNotEmpty(addAuth)) { String[] addAuths = addAuth.split(","); for (String singleAuthInfo : addAuths) { info.add(new AuthInfo(scheme, singleAuthInfo.getBytes())); } } return info; } }
public static void copyRegistryFields(com.alipay.sofa.rpc.config.RegistryConfig sofaRegistryConfig, com.alibaba.dubbo.config.RegistryConfig dubboRegistryConfig) { dubboRegistryConfig.setAddress(sofaRegistryConfig.getAddress()); dubboRegistryConfig.setProtocol(sofaRegistryConfig.getProtocol()); dubboRegistryConfig.setRegister(sofaRegistryConfig.isRegister()); dubboRegistryConfig.setSubscribe(sofaRegistryConfig.isSubscribe()); dubboRegistryConfig.setAddress(sofaRegistryConfig.getAddress()); dubboRegistryConfig.setTimeout(sofaRegistryConfig.getTimeout()); dubboRegistryConfig.setId(sofaRegistryConfig.getId()); dubboRegistryConfig.setParameters(sofaRegistryConfig.getParameters()); } }
@Override public void unRegister(ProviderConfig config) { String appName = config.getAppName(); if (!registryConfig.isRegister()) {
return; String addressInput = registryConfig.getAddress(); // xxx:2181,yyy:2181/path1/paht2 if (StringUtils.isEmpty(addressInput)) { throw new SofaRpcRuntimeException("Address of zookeeper registry is empty."); rootPath = CONTEXT_SEP; preferLocalFile = !CommonUtils.isFalse(registryConfig.getParameter(PARAM_PREFER_LOCAL_FILE)); ephemeralNode = !CommonUtils.isFalse(registryConfig.getParameter(PARAM_CREATE_EPHEMERAL)); if (LOGGER.isInfoEnabled()) { LOGGER.info( CuratorFrameworkFactory.Builder zkClientuilder = CuratorFrameworkFactory.builder() .connectString(address) .sessionTimeoutMs(registryConfig.getConnectTimeout() * 3) .connectionTimeoutMs(registryConfig.getConnectTimeout()) .canBeReadOnly(false) .retryPolicy(retryPolicy)
@Override public synchronized void init() { if (namingService != null) { return; } String addressInput = registryConfig.getAddress(); // xxx:8848,yyy:8848/namespace if (StringUtils.isEmpty(addressInput)) { throw new SofaRpcRuntimeException("Address of nacos registry is empty."); } int idx = addressInput.indexOf(CONTEXT_SEP); String namespace; String address; // IP地址 if (idx > 0) { address = addressInput.substring(0, idx); namespace = addressInput.substring(idx); } else { address = addressInput; namespace = DEFAULT_NAMESPACE; } defaultCluster = Collections.singletonList(NacosRegistryHelper.DEFAULT_CLUSTER); Properties nacosConfig = new Properties(); nacosConfig.put(PropertyKeyConst.SERVER_ADDR, address); nacosConfig.put(PropertyKeyConst.NAMESPACE, namespace); try { namingService = NamingFactory.createNamingService(nacosConfig); } catch (NacosException e) { throw new SofaRpcRuntimeException("Init nacos naming service error, address: " + address); } }
if (!registryConfig.isSubscribe()) {