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"));
}