1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

refactor dubbo examples & add datasource feature in example & update docs

This commit is contained in:
fangjian0423
2018-08-17 11:18:20 +08:00
parent d1fd1f0e2f
commit 6598768195
25 changed files with 784 additions and 186 deletions

View File

@@ -0,0 +1,18 @@
package org.springframework.cloud.alibaba.cloud.examples;
import java.util.List;
import com.alibaba.csp.sentinel.datasource.ConfigParser;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
/**
* @author fangjian
*/
public class JsonFlowRuleListParser implements ConfigParser<String, List<FlowRule>> {
@Override
public List<FlowRule> parse(String source) {
return JSON.parseObject(source, new TypeReference<List<FlowRule>>() {});
}
}

View File

@@ -1,5 +1,6 @@
package org.springframework.cloud.alibaba.cloud.examples;
import com.alibaba.csp.sentinel.datasource.ConfigParser;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.alibaba.sentinel.annotation.SentinelProtect;
@@ -23,6 +24,11 @@ public class ServiceApplication {
return new RestTemplate();
}
@Bean
public ConfigParser myParser() {
return new JsonFlowRuleListParser();
}
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}

View File

@@ -1,24 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo;
import org.springframework.boot.Banner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.alibaba.cloud.examples.dubbo.provider.ProviderApplication;
import org.springframework.stereotype.Component;
/**
* @author fangjian
*/
@Component
public class DubboProviderRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
SpringApplicationBuilder providerBuilder = new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF).registerShutdownHook(false)
.logStartupInfo(false).web(WebApplicationType.NONE);
providerBuilder.sources(ProviderApplication.class).run(args);
}
}

View File

@@ -1,10 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo;
/**
* @author fangjian
*/
public interface FooService {
String hello(String name);
}

View File

@@ -1,83 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo.consumer;
import java.util.Collections;
import org.springframework.boot.Banner;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.SentinelRpcException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ConsumerConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
/**
* @author fangjian
*/
@DubboComponentScan("org.springframework.cloud.alibaba.cloud.examples.dubbo.provider")
public class ConsumerApplication {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("demo-consumer");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("multicast://224.5.6.7:1234");
return registryConfig;
}
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
return consumerConfig;
}
@Bean
public FooServiceConsumer annotationDemoServiceConsumer() {
return new FooServiceConsumer();
}
public static void main(String[] args) {
SpringApplicationBuilder consumerBuilder = new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF).registerShutdownHook(false)
.logStartupInfo(false).web(WebApplicationType.NONE);
ApplicationContext applicationContext = consumerBuilder
.sources(ConsumerApplication.class).run(args);
FlowRule flowRule = new FlowRule();
flowRule.setResource(
"org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService:hello(java.lang.String)");
flowRule.setCount(10);
flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
flowRule.setLimitApp("default");
FlowRuleManager.loadRules(Collections.singletonList(flowRule));
FooServiceConsumer service = applicationContext.getBean(FooServiceConsumer.class);
for (int i = 0; i < 15; i++) {
try {
String message = service.hello("Jim");
System.out.println((i + 1) + " -> Success: " + message);
}
catch (SentinelRpcException ex) {
System.out.println("Blocked");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
}

View File

@@ -1,19 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo.consumer;
import org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService;
import com.alibaba.dubbo.config.annotation.Reference;
/**
* @author fangjian
*/
public class FooServiceConsumer {
@Reference(url = "dubbo://127.0.0.1:25758", timeout = 3000)
private FooService fooService;
public String hello(String name) {
return fooService.hello(name);
}
}

View File

@@ -1,17 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo.provider;
import org.springframework.cloud.alibaba.cloud.examples.dubbo.FooService;
import com.alibaba.dubbo.config.annotation.Service;
/**
* @author fangjian
*/
@Service
public class FooServiceImpl implements FooService {
@Override
public String hello(String name) {
return "hello, " + name;
}
}

View File

@@ -1,38 +0,0 @@
package org.springframework.cloud.alibaba.cloud.examples.dubbo.provider;
import org.springframework.context.annotation.Bean;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
/**
* @author fangjian
*/
@DubboComponentScan("org.springframework.cloud.alibaba.cloud.examples.dubbo.provider")
public class ProviderApplication {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("demo-provider");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("multicast://224.5.6.7:1234");
return registryConfig;
}
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(25758);
return protocolConfig;
}
}

View File

@@ -2,4 +2,13 @@ spring.application.name=sentinel-example
server.port=18083
management.endpoints.web.exposure.include=*
spring.cloud.sentinel.port=8721
spring.cloud.sentinel.dashboard=localhost:8080
spring.cloud.sentinel.dashboard=localhost:8080
spring.cloud.sentinel.datasource.type=file
spring.cloud.sentinel.datasource.recommendRefreshMs=3000
spring.cloud.sentinel.datasource.bufSize=4056196
spring.cloud.sentinel.datasource.charset=utf-8
spring.cloud.sentinel.datasource.configParser=myParser
spring.cloud.sentinel.datasource.file=/Users/you/rule.json