init
This commit is contained in:
18
sentinel/sentinel-demo/sentinel-demo-apache-dubbo/README.md
Normal file
18
sentinel/sentinel-demo/sentinel-demo-apache-dubbo/README.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Sentinel Apache Dubbo Demo
|
||||
|
||||
This demo shows how to integrate Apache Dubbo **2.7.x or above version** with Sentinel
|
||||
using `sentinel-apache-dubbo-adapter` module.
|
||||
|
||||
## Run the demo
|
||||
|
||||
For the provider demo `FooProviderBootstrap`, you need to add the following parameters when startup:
|
||||
|
||||
```shell
|
||||
-Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-provider-demo
|
||||
```
|
||||
|
||||
For the consumer demo `FooConsumerBootstrap`, you need to add the following parameters when startup:
|
||||
|
||||
```shell
|
||||
-Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-consumer-demo
|
||||
```
|
49
sentinel/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml
Normal file
49
sentinel/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>sentinel-demo</artifactId>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<version>1.8.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>sentinel-demo-apache-dubbo</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dubbo</groupId>
|
||||
<artifactId>dubbo</artifactId>
|
||||
<version>2.7.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Dubbo provides qos plugin and is enable by default. -->
|
||||
<!-- The dubbo-qos module is optional and it depends Netty 4.x, so add it explicitly -->
|
||||
<!-- @see http://dubbo.apache.org/zh-cn/docs/user/references/qos.html -->
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId>
|
||||
<version>4.1.31.Final</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Dependency for Spring Context -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
<version>5.1.5.RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Sentinel adapter and transport -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<artifactId>sentinel-apache-dubbo-adapter</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.csp</groupId>
|
||||
<artifactId>sentinel-transport-simple-http</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo;
|
||||
|
||||
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.consumer.ConsumerConfiguration;
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.consumer.FooServiceConsumer;
|
||||
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 org.apache.dubbo.rpc.AsyncRpcResult;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Please add the following VM arguments:
|
||||
* <pre>
|
||||
* -Djava.net.preferIPv4Stack=true
|
||||
* -Dcsp.sentinel.api.port=8721
|
||||
* -Dproject.name=dubbo-consumer-demo
|
||||
* </pre>
|
||||
*
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
public class FooConsumerBootstrap {
|
||||
|
||||
private static final String INTERFACE_RES_KEY = FooService.class.getName();
|
||||
private static final String RES_KEY = INTERFACE_RES_KEY + ":sayHello(java.lang.String)";
|
||||
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
AnnotationConfigApplicationContext consumerContext = new AnnotationConfigApplicationContext();
|
||||
consumerContext.register(ConsumerConfiguration.class);
|
||||
consumerContext.refresh();
|
||||
initFlowRule(10, false);
|
||||
|
||||
FooServiceConsumer service = consumerContext.getBean(FooServiceConsumer.class);
|
||||
|
||||
for (int i = 0; i < 15; i++) {
|
||||
try {
|
||||
String message = service.sayHello("Eric");
|
||||
System.out.println("Success: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// method flowcontrol
|
||||
Thread.sleep(1000);
|
||||
initFlowRule(20, true);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.sayHello("Eric");
|
||||
System.out.println("Success: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
System.out.println("fallback:" + service.doAnother());
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// fallback to result
|
||||
Thread.sleep(1000);
|
||||
registryCustomFallback();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.sayHello("Eric");
|
||||
System.out.println("Result: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
// fallback to exception
|
||||
Thread.sleep(1000);
|
||||
registryCustomFallbackForCustomException();
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.sayHello("Eric");
|
||||
System.out.println("Result: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Thread.sleep(1000);
|
||||
registryCustomFallbackWhenFallbackError();
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.sayHello("Eric");
|
||||
System.out.println("Result: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void registryCustomFallback() {
|
||||
DubboAdapterGlobalConfig.setConsumerFallback(
|
||||
(invoker, invocation, ex) -> AsyncRpcResult.newDefaultAsyncResult("fallback", invocation));
|
||||
|
||||
}
|
||||
|
||||
public static void registryCustomFallbackForCustomException() {
|
||||
DubboAdapterGlobalConfig.setConsumerFallback(
|
||||
(invoker, invocation, ex) -> AsyncRpcResult.newDefaultAsyncResult(new RuntimeException("fallback"), invocation));
|
||||
}
|
||||
|
||||
public static void registryCustomFallbackWhenFallbackError() {
|
||||
DubboAdapterGlobalConfig.setConsumerFallback(
|
||||
(invoker, invocation, ex) -> {
|
||||
throw new RuntimeException("fallback");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private static void initFlowRule(int interfaceFlowLimit, boolean method) {
|
||||
FlowRule flowRule = new FlowRule(INTERFACE_RES_KEY)
|
||||
.setCount(interfaceFlowLimit)
|
||||
.setGrade(RuleConstant.FLOW_GRADE_QPS);
|
||||
List<FlowRule> list = new ArrayList<>();
|
||||
if (method) {
|
||||
FlowRule flowRule1 = new FlowRule(RES_KEY)
|
||||
.setCount(5)
|
||||
.setGrade(RuleConstant.FLOW_GRADE_QPS);
|
||||
list.add(flowRule1);
|
||||
}
|
||||
list.add(flowRule);
|
||||
FlowRuleManager.loadRules(list);
|
||||
}
|
||||
}
|
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo;
|
||||
|
||||
import com.alibaba.csp.sentinel.adapter.dubbo.config.DubboAdapterGlobalConfig;
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.consumer.ConsumerConfiguration;
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.consumer.FooServiceConsumer;
|
||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||
import com.alibaba.csp.sentinel.slots.block.SentinelRpcException;
|
||||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
|
||||
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
|
||||
import org.apache.dubbo.rpc.AsyncRpcResult;
|
||||
import org.apache.dubbo.rpc.RpcContext;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
/**
|
||||
* Please add the following VM arguments:
|
||||
* <pre>
|
||||
* -Djava.net.preferIPv4Stack=true
|
||||
* -Dcsp.sentinel.api.port=8721
|
||||
* -Dproject.name=dubbo-consumer-demo
|
||||
* </pre>
|
||||
*
|
||||
* @author Zechao zheng
|
||||
*/
|
||||
public class FooConsumerExceptionDegradeBootstrap {
|
||||
|
||||
private static final String INTERFACE_RES_KEY = FooService.class.getName();
|
||||
private static final String RES_KEY = INTERFACE_RES_KEY + ":sayHello(java.lang.String)";
|
||||
|
||||
public static void main(String[] args) throws InterruptedException, ExecutionException {
|
||||
AnnotationConfigApplicationContext consumerContext = new AnnotationConfigApplicationContext();
|
||||
consumerContext.register(ConsumerConfiguration.class);
|
||||
consumerContext.refresh();
|
||||
|
||||
FooServiceConsumer service = consumerContext.getBean(FooServiceConsumer.class);
|
||||
initExceptionFallback(3);
|
||||
registryCustomFallback();
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.exceptionTest(true, false);
|
||||
System.out.println("Result: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
// sleep 3s to skip the time window
|
||||
initExceptionFallback(3);
|
||||
Thread.sleep(3000);
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
String message = service.exceptionTest(false, true);
|
||||
System.out.println("Result: " + message);
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
initExceptionFallback(3);
|
||||
Thread.sleep(3000);
|
||||
|
||||
try {
|
||||
// timeout to trigger the fallback
|
||||
CompletableFuture<String> completableFuture = RpcContext.getContext().asyncCall(() -> service.exceptionTest(false, true));
|
||||
System.out.println("Result: " + completableFuture.get());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
CompletableFuture<String> result = RpcContext.getContext().asyncCall(() -> service.exceptionTest(false, true));
|
||||
System.out.println("Result: " + result.get());
|
||||
} catch (SentinelRpcException ex) {
|
||||
System.out.println("Blocked");
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void registryCustomFallback() {
|
||||
DubboAdapterGlobalConfig.setConsumerFallback(
|
||||
(invoker, invocation, ex) -> AsyncRpcResult.newDefaultAsyncResult("fallback", invocation));
|
||||
|
||||
}
|
||||
|
||||
public static void initExceptionFallback(int timewindow) {
|
||||
DegradeRule degradeRule = new DegradeRule(INTERFACE_RES_KEY)
|
||||
.setCount(0.5)
|
||||
.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
|
||||
.setTimeWindow(timewindow)
|
||||
.setMinRequestAmount(1);
|
||||
DegradeRuleManager.loadRules(Collections.singletonList(degradeRule));
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.provider.ProviderConfiguration;
|
||||
import com.alibaba.csp.sentinel.init.InitExecutor;
|
||||
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
|
||||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
|
||||
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
|
||||
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
/**
|
||||
* Provider demo for Apache Dubbo 2.7.x or above. Please add the following VM arguments:
|
||||
* <pre>
|
||||
* -Djava.net.preferIPv4Stack=true
|
||||
* -Dcsp.sentinel.api.port=8720
|
||||
* -Dproject.name=dubbo-provider-demo
|
||||
* </pre>
|
||||
*
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
public class FooProviderBootstrap {
|
||||
|
||||
public static void main(String[] args) {
|
||||
// Users don't need to manually call this method.
|
||||
// Only for eager initialization.
|
||||
InitExecutor.doInit();
|
||||
|
||||
|
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
context.register(ProviderConfiguration.class);
|
||||
context.refresh();
|
||||
|
||||
System.out.println("Service provider is ready");
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
public interface FooService {
|
||||
|
||||
String sayHello(String name);
|
||||
|
||||
String doAnother();
|
||||
|
||||
String exceptionTest(boolean biz, boolean timeout);
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo.consumer;
|
||||
|
||||
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.config.ConsumerConfig;
|
||||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
@Configuration
|
||||
@DubboComponentScan
|
||||
public class ConsumerConfiguration {
|
||||
@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();
|
||||
// Uncomment below line if you don't want to enable Sentinel for Dubbo service consumers.
|
||||
// consumerConfig.setFilter("-sentinel.dubbo.consumer.filter");
|
||||
return consumerConfig;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FooServiceConsumer annotationDemoServiceConsumer() {
|
||||
return new FooServiceConsumer();
|
||||
}
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo.consumer;
|
||||
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.FooService;
|
||||
import org.apache.dubbo.config.annotation.Reference;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
public class FooServiceConsumer {
|
||||
|
||||
@Reference(url = "dubbo://127.0.0.1:25758", timeout = 500)
|
||||
private FooService fooService;
|
||||
|
||||
public String sayHello(String name) {
|
||||
return fooService.sayHello(name);
|
||||
}
|
||||
|
||||
public String doAnother() {
|
||||
return fooService.doAnother();
|
||||
}
|
||||
|
||||
public String exceptionTest(boolean biz, boolean timeout) {
|
||||
return fooService.exceptionTest(biz, timeout);
|
||||
}
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo.provider;
|
||||
|
||||
import com.alibaba.csp.sentinel.demo.apache.dubbo.FooService;
|
||||
import org.apache.dubbo.config.annotation.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
@Service
|
||||
public class FooServiceImpl implements FooService {
|
||||
|
||||
@Override
|
||||
public String sayHello(String name) {
|
||||
return String.format("Hello, %s at %s", name, LocalDateTime.now());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String doAnother() {
|
||||
return LocalDateTime.now().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String exceptionTest(boolean biz, boolean timeout) {
|
||||
if (biz) {
|
||||
throw new RuntimeException("biz exception");
|
||||
}
|
||||
if (timeout) {
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return "Success";
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 1999-2018 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.csp.sentinel.demo.apache.dubbo.provider;
|
||||
|
||||
import org.apache.dubbo.config.ApplicationConfig;
|
||||
import org.apache.dubbo.config.ProtocolConfig;
|
||||
import org.apache.dubbo.config.RegistryConfig;
|
||||
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author Eric Zhao
|
||||
*/
|
||||
@Configuration
|
||||
@DubboComponentScan
|
||||
public class ProviderConfiguration {
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user