Java源码示例:com.alipay.sofa.rpc.config.RegistryConfig

示例1
@Override
public void onApplicationEvent(ApplicationEvent event) {
    if (event instanceof ContextRefreshedEvent) {
        String address = environment.getProperty(SofaDashboardConstants.KEY);
        if (StringUtils.isNotBlank(address)) {
            RegistryConfig registryConfig = new RegistryConfig();
            if (address.startsWith(SofaDashboardConstants.ZOOKEEPER_PREFIX)) {
                RegistryConfigureProcessor processor = new ZookeeperConfigurator();
                registryConfig = processor.buildFromAddress(address);
            } else if (address.startsWith(SofaDashboardConstants.SOFA_PREFIX)) {
                registryConfig.setAddress(address.substring(SofaDashboardConstants.SOFA_PREFIX
                    .length()));
                registryConfig.setProtocol(SofaBootRpcConfigConstants.DEFAULT_REGISTRY);
                // config registry type
                Map<String, Object> props = new HashMap<>();
                props.put(SofaDashboardConstants.REGISTRY_TYPE,
                    SofaBootRpcConfigConstants.DEFAULT_REGISTRY);
                PropertySource propertySource = new MapPropertySource(
                    "customRegistryPropertySource", props);
                ((ConfigurableEnvironment) environment).getPropertySources().addLast(
                    propertySource);
            }
            registryDataSyncManager.start(registryConfig);
        }
    }
}
 
示例2
@Override
public RegistryConfig buildFromAddress(String address) {
    String zkAddress = RegistryParseUtil.parseAddress(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_ZOOKEEPER);
    Map<String, String> map = RegistryParseUtil.parseParam(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_ZOOKEEPER);

    String file = map.get("file");

    if (StringUtils.isEmpty(file)) {
        file = SofaBootRpcConfigConstants.REGISTRY_FILE_PATH_DEFAULT;
    }

    return new RegistryConfig().setAddress(zkAddress).setFile(file)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_ZOOKEEPER)
        .setParameters(map);
}
 
示例3
@Test
public void testSubAndUnsub() throws InterruptedException {
    RegistryConfig registryConfig = new RegistryConfig()
            .setProtocol("multicast")
            .setAddress("224.5.6.7:6667");
    MulticastRegistry server = new MulticastRegistry(registryConfig);
    server.init();
    MulticastRegistry client = new MulticastRegistry(registryConfig);
    client.init();


    server.register(PROVIDER_CONFIG);
    Thread.sleep(3000);

    ProviderGroup providerGroup = client.getAllProviderCache().get(MulticastRegistryHelper.buildListDataId(PROVIDER_CONFIG, SERVER_CONFIG.getProtocol()));
    Assert.assertFalse(providerGroup.isEmpty());

    server.unRegister(PROVIDER_CONFIG);

    Thread.sleep(3000);
    providerGroup = client.getAllProviderCache().get(MulticastRegistryHelper.buildListDataId(PROVIDER_CONFIG, SERVER_CONFIG.getProtocol()));
    Assert.assertTrue(providerGroup.isEmpty());


}
 
示例4
@Test
public void testSub() throws InterruptedException {
    RegistryConfig registryConfig = new RegistryConfig()
            .setProtocol("multicast")
            .setAddress("224.5.6.7:6668");
    MulticastRegistry server = new MulticastRegistry(registryConfig);
    server.init();
    server.register(PROVIDER_CONFIG);
    MulticastRegistry client = new MulticastRegistry(registryConfig);
    client.init();

    ProviderGroup providerGroup = client.getAllProviderCache().get(MulticastRegistryHelper.buildListDataId(PROVIDER_CONFIG, SERVER_CONFIG.getProtocol()));
    Assert.assertTrue(providerGroup == null);
    client.subscribe(CONSUMER_CONFIG);
    Thread.sleep(3000);
    ProviderGroup providerGroup1 = client.getAllProviderCache().get(MulticastRegistryHelper.buildListDataId(PROVIDER_CONFIG, SERVER_CONFIG.getProtocol()));
    Assert.assertFalse(providerGroup1.isEmpty());
}
 
示例5
@BeforeClass
public static void setUp() {
    FileUtils.cleanDirectory(new File(filePath));

    registryConfig = new RegistryConfig()
        .setProtocol("local")
        //.setParameter("registry.local.scan.period", "1000")
        .setSubscribe(true)
        .setRegister(true);
    //        registryConfig.setAddress()
    //                .setConnectTimeout(5000)
    //                .setHeartbeatPeriod(60000)
    //                .setReconnectPeriod(15000)
    //                .setBatch(true)
    //                .setBatchSize(10);

    registry = (LocalRegistry) RegistryFactory.getRegistry(registryConfig);
    try {
        registry.init();
    } catch (Exception e) {
        Assert.assertTrue(e instanceof SofaRpcRuntimeException);
    }
    registryConfig.setFile(file);
    registry.init();
    registry.start();
}
 
示例6
public void notifyConsumerTest() {
    LocalRegistry registry = new LocalRegistry(new RegistryConfig());
    ConsumerConfig<?> consumer = new ConsumerConfig();
    consumer.setInterfaceId("test");
    LocalRegistryTest.MockProviderInfoListener providerInfoListener = new LocalRegistryTest.MockProviderInfoListener();
    consumer.setProviderInfoListener(providerInfoListener);
    registry.subscribe(consumer);
    String key = LocalRegistryHelper.buildListDataId(consumer, consumer.getProtocol());

    registry.memoryCache.put(key, new ProviderGroup());

    Map<String, ProviderGroup> newCache = new HashMap<String, ProviderGroup>();
    ProviderGroup newProviderGroup = new ProviderGroup();
    ProviderInfo providerInfo = new ProviderInfo().setHost("0.0.0.0");
    newProviderGroup.add(providerInfo);
    newCache.put(key, newProviderGroup);

    registry.notifyConsumer(newCache);

    Map<String, ProviderGroup> ps = providerInfoListener.getData();
    Assert.assertTrue(ps.size() > 0);
    Assert.assertNotNull(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP));
    Assert.assertTrue(ps.get(RpcConstants.ADDRESS_DEFAULT_GROUP).size() == 1);
}
 
示例7
@Test
public void testWithNamespace() {
    RegistryConfig registryConfig = new RegistryConfig()
        .setProtocol("nacos")
        .setSubscribe(true)
        .setAddress("127.0.0.1:8848/namespace")
        .setRegister(true);

    NacosRegistry registry = (NacosRegistry) RegistryFactory.getRegistry(registryConfig);
    registry.init();

    Properties properties = registry.getNacosConfig();

    String address = properties.getProperty(PropertyKeyConst.SERVER_ADDR);

    Assert.assertEquals("127.0.0.1:8848", address);
    String namespace = properties.getProperty(PropertyKeyConst.NAMESPACE);
    Assert.assertEquals("namespace", namespace);

}
 
示例8
@Test
public void testWithoutNamespace() {
    RegistryConfig registryConfig = new RegistryConfig()
        .setProtocol("nacos")
        .setSubscribe(true)
        .setAddress("127.0.0.1:8848/")
        .setRegister(true);

    NacosRegistry registry = (NacosRegistry) RegistryFactory.getRegistry(registryConfig);
    registry.init();

    Properties properties = registry.getNacosConfig();

    String address = properties.getProperty(PropertyKeyConst.SERVER_ADDR);

    Assert.assertEquals("127.0.0.1:8848", address);
    String namespace = properties.getProperty(PropertyKeyConst.NAMESPACE);
    Assert.assertEquals("sofa-rpc", namespace);

}
 
示例9
@Test
public void testWithoutSlashNamespace() {
    RegistryConfig registryConfig = new RegistryConfig()
        .setProtocol("nacos")
        .setSubscribe(true)
        .setAddress("127.0.0.1:8848")
        .setRegister(true);

    NacosRegistry registry = (NacosRegistry) RegistryFactory.getRegistry(registryConfig);
    registry.init();

    Properties properties = registry.getNacosConfig();

    String address = properties.getProperty(PropertyKeyConst.SERVER_ADDR);

    Assert.assertEquals("127.0.0.1:8848", address);
    String namespace = properties.getProperty(PropertyKeyConst.NAMESPACE);
    //default namespace
    Assert.assertEquals("sofa-rpc", namespace);

}
 
示例10
@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;
            }
        }
    }
    return !isDirect && isMesh;
}
 
示例11
@Override
public List<ProviderGroup> subscribe() {
    List<ProviderGroup> result = null;
    String directUrl = consumerConfig.getDirectUrl();
    if (StringUtils.isNotEmpty(directUrl)) {
        // 如果走直连
        result = subscribeFromDirectUrl(directUrl);
    } else {
        // 没有配置url直连
        List<RegistryConfig> registryConfigs = consumerConfig.getRegistry();
        if (CommonUtils.isNotEmpty(registryConfigs)) {
            // 从多个注册中心订阅服务列表
            result = subscribeFromRegistries();
        }
    }
    return result;
}
 
示例12
/**
 * 取消订阅服务列表
 */
public void unSubscribe() {
    if (StringUtils.isEmpty(consumerConfig.getDirectUrl()) && consumerConfig.isSubscribe()) {
        List<RegistryConfig> registryConfigs = consumerConfig.getRegistry();
        if (registryConfigs != null) {
            for (RegistryConfig registryConfig : registryConfigs) {
                Registry registry = RegistryFactory.getRegistry(registryConfig);
                try {
                    registry.unSubscribe(consumerConfig);
                } catch (Exception e) {
                    String appName = consumerConfig.getAppName();
                    if (LOGGER.isWarnEnabled(appName)) {
                        LOGGER.warnWithApp(appName,
                            "Catch exception when unSubscribe from registry: " + registryConfig.getId()
                                + ", but you can ignore if it's called by JVM shutdown hook", e);
                    }
                }
            }
        }
    }
}
 
示例13
/**
 * 反注册服务
 */
protected void unregister() {
    if (providerConfig.isRegister()) {
        List<RegistryConfig> registryConfigs = providerConfig.getRegistry();
        if (registryConfigs != null) {
            for (RegistryConfig registryConfig : registryConfigs) {
                Registry registry = RegistryFactory.getRegistry(registryConfig);
                try {
                    registry.unRegister(providerConfig);
                } catch (Exception e) {
                    String appName = providerConfig.getAppName();
                    if (LOGGER.isWarnEnabled(appName)) {
                        // TODO WARN
                        LOGGER.warnWithApp(appName, "Catch exception when unRegister from registry: " +
                            registryConfig.getId()
                            + ", but you can ignore if it's called by JVM shutdown hook", e);
                    }
                }
            }
        }
    }
}
 
示例14
public void init(RegistryConfig registryConfig) {
    String endPointAddress = registryConfig.getAddress();
    if (!endPointAddress.contains(SofaDashboardConstants.COLON)) {
        throw new RuntimeException(
            "Please check your session address.Illegal session address is [" + endPointAddress
                    + "]");
    }
    sessionAddress = endPointAddress.split(SofaDashboardConstants.COLON)[0];
    port = Integer.valueOf(endPointAddress.split(SofaDashboardConstants.COLON)[1]);
}
 
示例15
@Override
public boolean start(RegistryConfig registryConfig) {

    RegistryDataSync registryDataSync = syncManager.get(registryConfig.getProtocol());

    if (registryDataSync != null) {
        registryDataSync.start(registryConfig);
        return true;
    } else {
        LOGGER.error("registryConfig is {}, not exist in our support list", registryConfig);
        return false;
    }
}
 
示例16
@Override
public boolean start(RegistryConfig registryConfig) {

    LOGGER.info("start zookeeper registry data sync,config is {}", registryConfig.getAddress());
    zookeeperAdminRegistry.start(registryConfig);
    zookeeperAdminRegistry.subscribe(SofaDashboardConstants.DEFAULT_GROUP,
            (type, data) -> LOGGER.info("data add,data is {}", data));
    return true;
}
 
示例17
@Override
public boolean start(RegistryConfig registryConfig) {

    LOGGER.info("start sofa registry data sync,config is {}", registryConfig.getAddress());
    sofaAdminRegistry.start(registryConfig);
    return true;
}
 
示例18
@Override
public boolean start(RegistryConfig registryConfig) {
    try {
        restTemplateClient.init(registryConfig);
        CheckSumTask checkSumTask = new CheckSumTask();
        // 60s
        executor.scheduleWithFixedDelay(checkSumTask, 0, 60, TimeUnit.SECONDS);
    } catch (Throwable t) {
        LOGGER.error("Failed to start sofa registry.", t);
    }
    return true;
}
 
示例19
/**
 * out binding, out binding means provide service
 *
 * @param contract           binding contract
 * @param binding            binding object
 * @param target             binding target
 * @param sofaRuntimeContext sofa runtime context
 * @return binding result
 */
@Override
public Object outBinding(Object contract, RpcBinding binding, Object target, SofaRuntimeContext sofaRuntimeContext) {

    String uniqueName = SpringBridge.getProviderConfigContainer().createUniqueName((Contract) contract, binding);
    ProviderConfig providerConfig = SpringBridge.getProviderConfigContainer().getProviderConfig(uniqueName);

    if (providerConfig == null) {
        throw new ServiceRuntimeException(LogCodes.getLog(LogCodes.INFO_SERVICE_METADATA_IS_NULL, uniqueName));
    }

    try {
        providerConfig.export();
    } catch (Exception e) {
        throw new ServiceRuntimeException(LogCodes.getLog(LogCodes.ERROR_PROXY_PUBLISH_FAIL), e);
    }

    if (SpringBridge.getProviderConfigContainer().isAllowPublish()) {
        providerConfig.setRegister(true);
        List<RegistryConfig> registrys = providerConfig.getRegistry();
        for (RegistryConfig registryConfig : registrys) {
            Registry registry = RegistryFactory.getRegistry(registryConfig);
            registry.init();
            registry.start();
            registry.register(providerConfig);
        }
    }
    return Boolean.TRUE;
}
 
示例20
@Override
public RegistryConfig buildFromAddress(String address) {
    String nacosAddress = RegistryParseUtil.parseAddress(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_NACOS);
    Map<String, String> map = RegistryParseUtil.parseParam(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_NACOS);

    return new RegistryConfig().setAddress(nacosAddress).setParameters(map)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_NACOS);
}
 
示例21
@Override
public RegistryConfig buildFromAddress(String address) {
    String filePath = parseConfig(address);

    if (StringUtils.isEmpty(filePath)) {
        filePath = SofaBootRpcConfigConstants.REGISTRY_FILE_PATH_DEFAULT;
    }

    return new RegistryConfig()
        .setFile(filePath)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_LOCAL);
}
 
示例22
@Override
public RegistryConfig buildFromAddress(String address) {
    String consulAddress = parseAddress(address);
    Map<String, String> map = parseParam(address);
    return new RegistryConfig()
        .setAddress(consulAddress)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_CONSUL)
        .setParameters(map);

}
 
示例23
@Override
public RegistryConfig buildFromAddress(String address) {
    String sofaRegistryAddress = RegistryParseUtil.parseAddress(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_SOFA);
    Map<String, String> map = RegistryParseUtil.parseParam(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_SOFA);

    return new RegistryConfig().setAddress(sofaRegistryAddress)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_SOFA)
        .setParameters(map);
}
 
示例24
@Override
public RegistryConfig buildFromAddress(String address) {
    String meshAddress = RegistryParseUtil.parseAddress(address,
        SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_MESH);

    meshAddress = HTTP + meshAddress;
    return new RegistryConfig().setAddress(meshAddress)
        .setProtocol(SofaBootRpcConfigConstants.REGISTRY_PROTOCOL_MESH);
}
 
示例25
/**
 * 发布所有 ProviderConfig 元数据信息到注册中心
 */
public void publishAllProviderConfig() {
    for (ProviderConfig providerConfig : getAllProviderConfig()) {

        ServerConfig serverConfig = (ServerConfig) providerConfig.getServer().get(0);
        if (!serverConfig.getProtocol().equalsIgnoreCase(SofaBootRpcConfigConstants.RPC_PROTOCOL_DUBBO)) {
            providerConfig.setRegister(true);

            List<RegistryConfig> registrys = providerConfig.getRegistry();
            for (RegistryConfig registryConfig : registrys) {

                Registry registry = RegistryFactory.getRegistry(registryConfig);
                registry.init();
                registry.start();

                registry.register(providerConfig);

                if (LOGGER.isInfoEnabled()) {
                    LOGGER.info("service published.  interfaceId[" + providerConfig.getInterfaceId() +
                        "]; protocol[" +
                        serverConfig.getProtocol() + "]");
                }
            }

        }
    }
}
 
示例26
/**
 * 获取 RegistryConfig
 *
 * @return the RegistryConfig
 * @throws SofaBootRpcRuntimeException SofaBoot运行时异常
 */
public RegistryConfig getRegistryConfig() throws SofaBootRpcRuntimeException {

    if (StringUtils.isNotBlank(customDefaultRegistry)) {
        return getRegistryConfig(customDefaultRegistry);
    } else {
        return getRegistryConfig(DEFAULT_REGISTRY);
    }
}
 
示例27
@Test
public void test() {
    String address = "zookeeper://127.0.0.1:2181?aaa=111&rrr=666&file=/host/zk";

    ZookeeperConfigurator zookeeperConfigurator = new ZookeeperConfigurator();
    RegistryConfig registryConfig = zookeeperConfigurator.buildFromAddress(address);
    assertNotNull(registryConfig);
    assertEquals("zookeeper", registryConfig.getProtocol());
    assertEquals("127.0.0.1:2181", registryConfig.getAddress());
    assertEquals("/host/zk", registryConfig.getFile());
}
 
示例28
@Test
public void buildFromAddress() {
    String address = "sofa://127.0.0.1:9603?cluster=test";

    SofaRegistryConfigurator sofaRegistryConfigurator = new SofaRegistryConfigurator();
    RegistryConfig registryConfig = sofaRegistryConfigurator.buildFromAddress(address);

    assertNotNull(registryConfig);
    assertEquals("sofa", registryConfig.getProtocol());
    assertEquals("127.0.0.1:9603", registryConfig.getAddress());
    assertNotNull(registryConfig.getParameters());
    assertEquals("test", registryConfig.getParameter("cluster"));
}
 
示例29
@Test
public void buildFromAddress() {
    String address = "mesh://127.0.0.1:12220";

    MeshConfigurator meshConfigurator = new MeshConfigurator();
    RegistryConfig registryConfig = meshConfigurator.buildFromAddress(address);
    assertEquals("mesh", registryConfig.getProtocol());
    assertEquals("http://127.0.0.1:12220", registryConfig.getAddress());
}
 
示例30
@Test
public void buildFromAddress() {
    String address = "nacos://127.0.0.1:8848?cluster=test";

    NacosConfigurator nacosConfigurator = new NacosConfigurator();
    RegistryConfig registryConfig = nacosConfigurator.buildFromAddress(address);

    assertNotNull(registryConfig);
    assertEquals("nacos", registryConfig.getProtocol());
    assertEquals("127.0.0.1:8848", registryConfig.getAddress());
    assertNotNull(registryConfig.getParameters());
    assertEquals("test", registryConfig.getParameter("cluster"));
}