This is an automated email from the ASF dual-hosted git repository.
victory pushed a commit to branch samples-for-2.7.0-SNAPSHOT
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-samples.git
The following commit(s) were added to refs/heads/samples-for-2.7.0-SNAPSHOT by
this push:
new 1b85eb6 resilience4j dubbo sample
1b85eb6 is described below
commit 1b85eb6f974dcaa9b8246600dc091cd37e34d3e9
Author: cvictory <[email protected]>
AuthorDate: Wed Jan 2 15:10:20 2019 +0800
resilience4j dubbo sample
---
.../apache/dubbo/samples/api/GreetingsService.java | 6 +-
.../dubbo/samples/governance/AsyncConsumer.java | 23 ++--
.../governance/filter/AsyncPostprocessFilter.java | 9 +-
.../main/resources/spring/dubbo-demo-consumer.xml | 2 +-
.../main/resources/spring/dubbo-demo-provider.xml | 4 +-
.../Resilience4jAnnotationConsumer.java | 2 +-
.../resilience4j/action/AnnotationAction.java | 39 ++++--
.../filter/Resilience4jCircuitBreakerFilter.java | 39 +++++-
.../filter/Resilience4jRateLimiterFilter.java | 13 +-
.../resilience4j/impl/AnnotationServiceImpl.java | 2 +-
.../impl/CircuitBreakerServiceImpl.java | 14 ++-
.../resilience4j/impl/RateLimiterServiceImpl.java | 2 +-
.../resources/spring/dubbo-consumer.properties | 3 +-
.../resources/spring/dubbo-provider.properties | 2 +-
.../dubbo-samples-resilience4j-springboot2/pom.xml | 95 ++++++++++++++
.../Resilience4jBootAnnotationConsumer.java | 58 ---------
.../Resilience4jBootAnnotationProvider.java | 61 ---------
.../EmbeddedZooKeeper.java | 2 +-
.../api/AnnotationService.java | 2 +-
.../api/CircuitBreakerService.java} | 10 +-
.../api/RateLimiterService.java} | 10 +-
.../Resilience4jBootConsumerApplication.java | 57 +++++++++
.../consumer}/action/AnnotationAction.java | 10 +-
.../action/CircuitBreakMethodWrapper.java} | 28 ++---
.../consumer/action/CircuitBreakTypeWrapper.java} | 28 ++---
.../consumer/action/CircuitBreakerAction.java | 138 +++++++++++++++++++++
.../consumer/action/RateLimiterAction.java | 75 +++++++++++
.../consumer/controller/TestController.java | 103 +++++++++++++++
.../provider/DubbConfiguration.java} | 15 ++-
.../Resilience4jBootProviderApplication.java | 67 ++++++++++
.../provider}/impl/AnnotationServiceImpl.java | 10 +-
.../provider}/impl/CircuitBreakerServiceImpl.java | 18 ++-
.../provider}/impl/RateLimiterServiceImpl.java | 8 +-
...onsumer.properties => application-consumer.yml} | 16 ++-
...onsumer.properties => application-provider.yml} | 15 ++-
.../{log4j.properties => application.yml} | 28 +++--
.../src/main/resources/logback-spring.xml | 45 +++++++
.../resources/spring/dubbo-consumer.properties | 11 +-
.../resources/spring/dubbo-provider.properties | 11 +-
dubbo-samples-resilience4j/pom.xml | 2 +-
dubbo-samples-spring-boot-hystrix/pom.xml | 6 +
41 files changed, 813 insertions(+), 276 deletions(-)
diff --git
a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java
b/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java
index 5d21f1d..888d6cb 100644
---
a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java
+++
b/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java
@@ -18,9 +18,9 @@
package org.apache.dubbo.samples.api;
-import com.alibaba.dubbo.config.async.DubboAsync;
-
-@DubboAsync
+//import com.alibaba.dubbo.config.async.DubboAsync;
+//
+//@DubboAsync
public interface GreetingsService {
String sayHi(String name);
}
diff --git
a/dubbo-samples-async/dubbo-samples-async-generated-future/src/main/java/org/apache/dubbo/samples/governance/AsyncConsumer.java
b/dubbo-samples-async/dubbo-samples-async-generated-future/src/main/java/org/apache/dubbo/samples/governance/AsyncConsumer.java
index 7198a88..c5e16b1 100644
---
a/dubbo-samples-async/dubbo-samples-async-generated-future/src/main/java/org/apache/dubbo/samples/governance/AsyncConsumer.java
+++
b/dubbo-samples-async/dubbo-samples-async-generated-future/src/main/java/org/apache/dubbo/samples/governance/AsyncConsumer.java
@@ -19,26 +19,21 @@
package org.apache.dubbo.samples.governance;
-import org.apache.dubbo.samples.api.GreetingsServiceAsync;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import java.util.concurrent.CompletableFuture;
-
/**
* CallbackConsumer
*/
public class AsyncConsumer {
public static void main(String[] args) throws Exception {
- ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"META-INF/spring/async-consumer.xml"});
- context.start();
-
- final GreetingsServiceAsync greetingsService = (GreetingsServiceAsync)
context.getBean("greetingsService");
-
- CompletableFuture<String> future = greetingsService.sayHiAsync("async
call reqeust");
- System.out.println("async call ret :" + future.get());
-
- System.out.println(greetingsService.sayHi("normal sync call request"));
+// ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"META-INF/spring/async-consumer.xml"});
+// context.start();
+//
+// final GreetingsServiceAsync greetingsService =
(GreetingsServiceAsync) context.getBean("greetingsService");
+//
+// CompletableFuture<String> future =
greetingsService.sayHiAsync("async call reqeust");
+// System.out.println("async call ret :" + future.get());
+//
+// System.out.println(greetingsService.sayHi("normal sync call
request"));
System.in.read();
}
diff --git
a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/governance/filter/AsyncPostprocessFilter.java
b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/governance/filter/AsyncPostprocessFilter.java
index dfc89e2..11ae85d 100644
---
a/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/governance/filter/AsyncPostprocessFilter.java
+++
b/dubbo-samples-async/dubbo-samples-async-original-future/src/main/java/org/apache/dubbo/samples/governance/filter/AsyncPostprocessFilter.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.samples.governance.filter;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.AbstractPostProcessFilter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
@@ -28,17 +27,17 @@ import org.apache.dubbo.rpc.RpcException;
*
*/
@Activate(group = {Constants.PROVIDER, Constants.CONSUMER})
-public class AsyncPostprocessFilter extends AbstractPostProcessFilter {
- @Override
+public class AsyncPostprocessFilter {
+ //extends AbstractPostProcessFilter {
protected Result doPostProcess(Result result, Invoker<?> invoker,
Invocation invocation) {
System.out.println(Thread.currentThread().getName());
System.out.println("Filter get the return value: " +
result.getValue());
return result;
}
- @Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws
RpcException {
System.out.println(Thread.currentThread().getName());
- return postProcessResult(invoker.invoke(invocation), invoker,
invocation);
+// return postProcessResult(invoker.invoke(invocation), invoker,
invocation);
+ return null;
}
}
diff --git
a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
index 47d2c73..6bb289e 100644
---
a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
+++
b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -38,4 +38,4 @@
<dubbo:reference timeout="1000" id="demoService" check="false"
interface="org.apache.dubbo.samples.governance.api.DemoService"/>
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
index aa65db3..63d49ef 100644
---
a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
+++
b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
@@ -37,6 +37,6 @@
<bean id="demoService"
class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
<!-- declare the service interface to be exported -->
- <dubbo:service
interface="org.apache.dubbo.samples.governance.api.DemoService"
ref="demoService"/>
+ <dubbo:service tag=""
interface="org.apache.dubbo.samples.governance.api.DemoService"
ref="demoService"/>
-</beans>
\ No newline at end of file
+</beans>
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jAnnotationConsumer.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jAnnotationConsumer.java
index 59e15c1..f1949d4 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jAnnotationConsumer.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jAnnotationConsumer.java
@@ -39,7 +39,7 @@ public class Resilience4jAnnotationConsumer {
final AnnotationAction annotationAction = (AnnotationAction)
context.getBean("annotationAction");
String hello = annotationAction.doSayHello("world");
System.err.println("result :" + hello);
- annotationAction.sayCircuitBreaker("circuitBreaker");
+// annotationAction.sayCircuitBreaker("circuitBreaker");
annotationAction.sayRateLimiter("rateLimiter", "Just Happy!");
System.in.read();
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
index 80fe535..493e944 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
@@ -31,11 +31,11 @@ import org.springframework.stereotype.Component;
@Component("annotationAction")
public class AnnotationAction {
- @Reference
+ @Reference(interfaceClass = AnnotationService.class)
private AnnotationService annotationService;
- @Reference
+ @Reference(interfaceClass = CircuitBreakerService.class)
private CircuitBreakerService circuitBreakerService;
- @Reference
+ @Reference(interfaceClass = RateLimiterService.class)
private RateLimiterService rateLimiterService;
public String doSayHello(String name) {
@@ -49,12 +49,12 @@ public class AnnotationAction {
{
int i = 0;
while (true) {
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(circuitBreakerService.say(name +
(i++)));
+ doSayCircuitBreaker("off", name, 20, ++i);
+ doSayCircuitBreaker("on", name, 25, ++i);
+ doSayCircuitBreaker("half", name, 30, ++i);
+ doSayCircuitBreaker("off", name, 30, ++i);
+ doSayCircuitBreaker("half", name, 30, ++i);
+ doSayCircuitBreaker("off", name, 15, ++i);
}
}
}
@@ -62,6 +62,21 @@ public class AnnotationAction {
}
+ private void doSayCircuitBreaker(String tag, String name, int c, int l) {
+ System.out.println("--------------------- start to run circuitBreak: "
+ tag + name + "---------------------");
+ for (int i = 0; i < c; i++) {
+ try {
+ Thread.sleep(20);
+ System.out.print(System.currentTimeMillis() + " - ");
+ System.out.println(circuitBreakerService.say(tag + "-" + name
+ "=" + l + ":" + i));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (Throwable t) {
+ System.err.println("==" + t.getMessage());
+ }
+ }
+ }
+
public void sayRateLimiter(String name, String value) {
new Thread(new Runnable() {
@Override
@@ -70,11 +85,13 @@ public class AnnotationAction {
int i = 0;
while (true) {
try {
- Thread.sleep(10);
+ Thread.sleep(40);
+ System.out.println(rateLimiterService.say(name +
(i++), value + i));
} catch (InterruptedException e) {
e.printStackTrace();
+ } catch (Exception e) {
+ System.err.println("<<<<<<<<<<<<<<<<<<<<<<<<<< " +
e.getMessage() + " >>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
- System.out.println(rateLimiterService.say(name +
(i++), value + i));
}
}
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jCircuitBreakerFilter.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jCircuitBreakerFilter.java
index bfc7c10..634eacf 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jCircuitBreakerFilter.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jCircuitBreakerFilter.java
@@ -20,24 +20,33 @@ package org.apache.dubbo.samples.resilience4j.filter;
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
+import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
+import io.github.resilience4j.circuitbreaker.utils.CircuitBreakerUtils;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.RpcException;
+import java.time.Duration;
+import java.util.concurrent.atomic.AtomicLong;
+
/**
- * @author cvictory ON 2018/12/25
+ * 2018/12/25
*/
public class Resilience4jCircuitBreakerFilter implements Filter {
static CircuitBreaker circuitBreaker;
+ static AtomicLong count = new AtomicLong(0);
+ static AtomicLong breakCount = new AtomicLong(0);
static {
CircuitBreakerConfig config = CircuitBreakerConfig.custom()
.failureRateThreshold(20)
- .ringBufferSizeInClosedState(5)
+ .waitDurationInOpenState(Duration.ofMillis(6000))
+ .ringBufferSizeInHalfOpenState(10)
+ .ringBufferSizeInClosedState(10)
.build();
CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(config);
circuitBreaker = registry.circuitBreaker("myCircuitBreaker");
@@ -46,17 +55,35 @@ public class Resilience4jCircuitBreakerFilter implements
Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws
RpcException {
System.out.println("**************** Enter CircuitBreaker
****************");
- long start = System.nanoTime();
+ long countLong = count.incrementAndGet();
+ long start = 0;
try {
+ CircuitBreakerUtils.isCallPermitted(circuitBreaker);
+ start = System.nanoTime();
Result result = invoker.invoke(invocation);
+ if (result.hasException()) {
+ doThrowException(result.getException(), start);
+ return result;
+ }
long durationInNanos = System.nanoTime() - start;
circuitBreaker.onSuccess(durationInNanos);
return result;
+ } catch (CircuitBreakerOpenException cbo) {
+
+ doCircuitBreakerOpenException(cbo, countLong,
breakCount.incrementAndGet());
+ throw cbo;
} catch (Throwable throwable) {
- System.out.println("************* CircuitBreaker! Try it later!
*************");
- long durationInNanos = System.nanoTime() - start;
- circuitBreaker.onError(durationInNanos, throwable);
+ doThrowException(throwable, start);
throw throwable;
}
}
+
+ private void doThrowException(Throwable throwable, long start) {
+ long durationInNanos = System.nanoTime() - start;
+ circuitBreaker.onError(durationInNanos, throwable);
+ }
+
+ private void doCircuitBreakerOpenException(Throwable throwable, long
count, long breakCount) {
+ System.err.println("---------------------------- Open CircuitBreaker!
Try it later! ----------------------------" + breakCount + " / " + count);
+ }
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jRateLimiterFilter.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jRateLimiterFilter.java
index 65ce4bf..f0a38e5 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jRateLimiterFilter.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/filter/Resilience4jRateLimiterFilter.java
@@ -21,6 +21,7 @@ package org.apache.dubbo.samples.resilience4j.filter;
import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
+import io.github.resilience4j.ratelimiter.RequestNotPermitted;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
@@ -30,9 +31,8 @@ import org.apache.dubbo.rpc.RpcException;
import java.time.Duration;
-
/**
- * @author cvictory ON 2018/12/25
+ * 2018/12/25
*/
public class Resilience4jRateLimiterFilter implements Filter {
@@ -41,8 +41,8 @@ public class Resilience4jRateLimiterFilter implements Filter {
static {
RateLimiterConfig config = RateLimiterConfig.custom()
.limitRefreshPeriod(Duration.ofMillis(1000))
- .limitForPeriod(2)
- .timeoutDuration(Duration.ofMillis(2000))
+ .limitForPeriod(10)
+ .timeoutDuration(Duration.ofMillis(200))
.build();
RateLimiterRegistry rateLimiterRegistry =
RateLimiterRegistry.of(config);
@@ -55,8 +55,11 @@ public class Resilience4jRateLimiterFilter implements Filter
{
System.out.println("**************** Enter RateLimiter
****************");
RateLimiter.waitForPermission(rateLimiter);
return invoker.invoke(invocation);
+ } catch (RequestNotPermitted rnp) {
+ System.err.println("---------------- Rate Limiter! Try it later!
----------------");
+ throw rnp;
} catch (Throwable throwable) {
- System.out.println("************* Rate Limiter! Try it later!
*************");
+ System.err.println("........" + throwable.getMessage());
throw throwable;
}
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
index d2dc0ec..72d7919 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
@@ -25,7 +25,7 @@ import
org.apache.dubbo.samples.resilience4j.api.AnnotationService;
/**
* AsyncServiceImpl
*/
-@Service
+@Service(interfaceClass = AnnotationService.class)
public class AnnotationServiceImpl implements AnnotationService {
// @HystrixCommand(commandProperties = { @HystrixProperty(name =
"circuitBreaker.requestVolumeThreshold", value = "10"),
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
index 9853d35..608d820 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
@@ -21,13 +21,23 @@ package org.apache.dubbo.samples.resilience4j.impl;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.samples.resilience4j.api.CircuitBreakerService;
+import java.util.concurrent.atomic.AtomicLong;
+
/**
* 2018/12/26
*/
-@Service
+@Service(interfaceClass = CircuitBreakerService.class)
public class CircuitBreakerServiceImpl implements CircuitBreakerService {
+ private AtomicLong count = new AtomicLong(0);
+
@Override
public String say(String name) {
- throw new RuntimeException("Exception to show resilience enabled.");
+ long countLong = count.incrementAndGet();
+ if (name.startsWith("half") && countLong % 20 < 18) {
+ return "Hello " + name + " - " + countLong;
+ } else if (name.startsWith("off")) {
+ return "Hello " + name + " - " + countLong;
+ }
+ throw new RuntimeException("Exception to show resilience enabled." +
name);
}
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
index bccaafc..a55ef91 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
@@ -24,7 +24,7 @@ import
org.apache.dubbo.samples.resilience4j.api.RateLimiterService;
/**
* 2018/12/26
*/
-@Service
+@Service(interfaceClass = RateLimiterService.class)
public class RateLimiterServiceImpl implements RateLimiterService {
@Override
public String say(String name, String value) {
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-consumer.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-consumer.properties
index 5ebcaad..507dbeb 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-consumer.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-consumer.properties
@@ -17,7 +17,8 @@
#
#
-dubbo.application.name=annotation-consumer
+dubbo.application.name=resilience4j-annotation-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.consumer.timeout=3000
dubbo.consumer.filter=circuitBreaker
+dubbo.consumer.retries=-1
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-provider.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-provider.properties
index 9331899..55e67cf 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-provider.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/resources/spring/dubbo-provider.properties
@@ -17,7 +17,7 @@
#
#
-dubbo.application.name=annotation-provider
+dubbo.application.name=resilience4j-annotation-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/pom.xml
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/pom.xml
index 862a475..06bcdc1 100644
--- a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/pom.xml
+++ b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/pom.xml
@@ -35,6 +35,18 @@
<resilience4j.version>0.13.1</resilience4j.version>
</properties>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <!-- Import dependency management from Spring Boot -->
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>2.1.1.RELEASE</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
<dependencies>
<dependency>
@@ -68,8 +80,91 @@
<version>${resilience4j.version}</version>
</dependency>
<dependency>
+ <groupId>io.github.resilience4j</groupId>
+ <artifactId>resilience4j-spring-boot2</artifactId>
+ <version>${resilience4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.github.resilience4j</groupId>
+ <artifactId>resilience4j-metrics</artifactId>
+ <version>${resilience4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.github.resilience4j</groupId>
+ <artifactId>resilience4j-micrometer</artifactId>
+ <version>${resilience4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.logstash.logback</groupId>
+ <artifactId>logstash-logback-encoder</artifactId>
+ <version>5.2</version>
+ </dependency>
+ <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate.validator</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ <version>6.0.13.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>2.0.1.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>999-not-exist-v3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <version>1.7.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>1.7.9</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>999-not-exist-v3</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>999-not-exist</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat.embed</groupId>
+ <artifactId>tomcat-embed-core</artifactId>
+ <version>9.0.13</version>
+ </dependency>
+ <!--<dependency>-->
+ <!--<groupId>com.alibaba.boot</groupId>-->
+ <!--<artifactId>dubbo-spring-boot-starter</artifactId>-->
+ <!--<version>0.2.0</version>-->
+ <!--</dependency>-->
+ <!--<dependency>-->
+ <!--<groupId>io.prometheus</groupId>-->
+ <!--<artifactId>simpleclient_spring_boot</artifactId>-->
+ <!--<version>0.0.25</version>-->
+ <!--</dependency>-->
</dependencies>
</project>
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationConsumer.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationConsumer.java
deleted file mode 100644
index d6ac170..0000000
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationConsumer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4j;
-
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-import org.apache.dubbo.samples.resilience4j.action.AnnotationAction;
-import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-import org.springframework.context.annotation.PropertySource;
-
-/**
- * CallbackConsumer
- */
-public class Resilience4jBootAnnotationConsumer {
-
- public static void main(String[] args) throws Exception {
- AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext(ConsumerConfiguration.class);
- context.start();
- final AnnotationAction annotationAction = (AnnotationAction)
context.getBean("annotationAction");
- String hello = annotationAction.doSayHello("world");
- System.err.println("result :" + hello);
- System.in.read();
- }
-
- @Configuration
- @EnableDubbo(scanBasePackages =
"com.alibaba.dubbo.samples.resilience4j.action")
- @PropertySource("classpath:/spring/dubbo-consumer.properties")
- @ComponentScan(value = {"org.apache.dubbo.samples.resilience4j.action"})
- @EnableAspectJAutoProxy
- static public class ConsumerConfiguration {
-
-// @Bean
-// public HystrixCommandAspect hystrixCommandAspect() {
-// return new HystrixCommandAspect();
-// }
-
- }
-
-}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationProvider.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationProvider.java
deleted file mode 100644
index c789eca..0000000
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/Resilience4jBootAnnotationProvider.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4j;
-
-
-import org.apache.dubbo.config.ProviderConfig;
-import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-import org.springframework.context.annotation.PropertySource;
-
-/**
- * MergeProvider
- */
-public class Resilience4jBootAnnotationProvider {
-
- public static void main(String[] args) throws Exception {
- new EmbeddedZooKeeper(2181, false).start();
- AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext(ProviderConfiguration.class);
- context.start();
- System.in.read();
- }
-
- @Configuration
- @EnableDubbo(scanBasePackages =
"com.alibaba.dubbo.samples.resilience4j.impl")
- @PropertySource("classpath:/spring/dubbo-provider.properties")
- @EnableAspectJAutoProxy
- static public class ProviderConfiguration {
- @Bean
- public ProviderConfig providerConfig() {
- ProviderConfig providerConfig = new ProviderConfig();
- providerConfig.setTimeout(1000);
- return providerConfig;
- }
-
-// @Bean
-// public HystrixCommandAspect hystrixCommandAspect() {
-// return new HystrixCommandAspect();
-// }
- }
-
-}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/EmbeddedZooKeeper.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/EmbeddedZooKeeper.java
similarity index 99%
rename from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/EmbeddedZooKeeper.java
rename to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/EmbeddedZooKeeper.java
index 9c8ae8a..80a2adf 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/EmbeddedZooKeeper.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/EmbeddedZooKeeper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.samples.resilience4j;
+package org.apache.dubbo.samples.resilience4jboot2;
import java.io.File;
import java.lang.reflect.Method;
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/AnnotationService.java
similarity index 94%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/AnnotationService.java
index 74b849a..af261c5 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/AnnotationService.java
@@ -17,7 +17,7 @@
*
*/
-package org.apache.dubbo.samples.resilience4j.api;
+package org.apache.dubbo.samples.resilience4jboot2.api;
/**
* AsyncService
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/CircuitBreakerService.java
similarity index 85%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/CircuitBreakerService.java
index 74b849a..5da9786 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/CircuitBreakerService.java
@@ -16,14 +16,12 @@
* limitations under the License.
*
*/
-
-package org.apache.dubbo.samples.resilience4j.api;
+package org.apache.dubbo.samples.resilience4jboot2.api;
/**
- * AsyncService
+ * 2018/12/26
*/
-public interface AnnotationService {
-
- String sayHello(String name);
+public interface CircuitBreakerService {
+ String say(String name);
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/RateLimiterService.java
similarity index 84%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/RateLimiterService.java
index 74b849a..0686f58 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/api/RateLimiterService.java
@@ -16,14 +16,12 @@
* limitations under the License.
*
*/
-
-package org.apache.dubbo.samples.resilience4j.api;
+package org.apache.dubbo.samples.resilience4jboot2.api;
/**
- * AsyncService
+ * 2018/12/26
*/
-public interface AnnotationService {
-
- String sayHello(String name);
+public interface RateLimiterService {
+ String say(String name, String value);
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/Resilience4jBootConsumerApplication.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/Resilience4jBootConsumerApplication.java
new file mode 100644
index 0000000..3449458
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/Resilience4jBootConsumerApplication.java
@@ -0,0 +1,57 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4jboot2.consumer;
+
+import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
+import
io.github.resilience4j.circuitbreaker.monitoring.health.CircuitBreakerHealthIndicator;
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * CallbackConsumer
+ */
+@SpringBootApplication
+//@EnableSpringBootMetricsCollector
+//@EnablePrometheusEndpoint
+@EnableConfigurationProperties
+@EnableDubbo(scanBasePackages =
"org.apache.dubbo.samples.resilience4jboot2.consumer.action")
+@PropertySource("classpath:/spring/dubbo-consumer.properties")
+public class Resilience4jBootConsumerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Resilience4jBootConsumerApplication.class, args);
+ }
+
+ @Bean
+ public HealthIndicator backendA(CircuitBreakerRegistry
circuitBreakerRegistry){
+ return new
CircuitBreakerHealthIndicator(circuitBreakerRegistry.circuitBreaker("backendA"));
+ }
+
+ @Bean
+ public HealthIndicator backendB(CircuitBreakerRegistry
circuitBreakerRegistry){
+ return new
CircuitBreakerHealthIndicator(circuitBreakerRegistry.circuitBreaker("backendB"));
+ }
+
+}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/AnnotationAction.java
similarity index 81%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/AnnotationAction.java
index c70051a..e1a073a 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/AnnotationAction.java
@@ -17,10 +17,10 @@
*
*/
-package org.apache.dubbo.samples.resilience4j.action;
+package org.apache.dubbo.samples.resilience4jboot2.consumer.action;
import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.samples.resilience4j.api.AnnotationService;
+import org.apache.dubbo.samples.resilience4jboot2.api.AnnotationService;
import org.springframework.stereotype.Component;
/**
@@ -29,16 +29,12 @@ import org.springframework.stereotype.Component;
@Component("annotationAction")
public class AnnotationAction {
- @Reference
+ @Reference(interfaceClass = AnnotationService.class)
private AnnotationService annotationService;
-// @HystrixCommand(fallbackMethod = "reliable")
public String doSayHello(String name) {
return annotationService.sayHello(name);
}
- public String reliable(String name) {
- return "hystrix fallback value";
- }
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakMethodWrapper.java
similarity index 63%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakMethodWrapper.java
index c70051a..c2c08be 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakMethodWrapper.java
@@ -16,29 +16,23 @@
* limitations under the License.
*
*/
+package org.apache.dubbo.samples.resilience4jboot2.consumer.action;
-package org.apache.dubbo.samples.resilience4j.action;
-
+import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.samples.resilience4j.api.AnnotationService;
+import org.apache.dubbo.samples.resilience4jboot2.api.CircuitBreakerService;
import org.springframework.stereotype.Component;
/**
- * AnnotationAction
+ * 2019/1/2
*/
-@Component("annotationAction")
-public class AnnotationAction {
-
- @Reference
- private AnnotationService annotationService;
+@Component("circuitBreakMethodWrapper")
+public class CircuitBreakMethodWrapper {
+ @Reference(interfaceClass = CircuitBreakerService.class)
+ private CircuitBreakerService circuitBreakerService;
-// @HystrixCommand(fallbackMethod = "reliable")
- public String doSayHello(String name) {
- return annotationService.sayHello(name);
+ @CircuitBreaker(name = "backendB")
+ public String say(String name) {
+ return circuitBreakerService.say(name);
}
-
- public String reliable(String name) {
- return "hystrix fallback value";
- }
-
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakTypeWrapper.java
similarity index 63%
rename from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
rename to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakTypeWrapper.java
index c70051a..8cff9f2 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/action/AnnotationAction.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakTypeWrapper.java
@@ -16,29 +16,23 @@
* limitations under the License.
*
*/
+package org.apache.dubbo.samples.resilience4jboot2.consumer.action;
-package org.apache.dubbo.samples.resilience4j.action;
-
+import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.apache.dubbo.config.annotation.Reference;
-import org.apache.dubbo.samples.resilience4j.api.AnnotationService;
+import org.apache.dubbo.samples.resilience4jboot2.api.CircuitBreakerService;
import org.springframework.stereotype.Component;
/**
- * AnnotationAction
+ * 2019/1/2
*/
-@Component("annotationAction")
-public class AnnotationAction {
-
- @Reference
- private AnnotationService annotationService;
+@Component("circuitBreakTypeWrapper")
+@CircuitBreaker(name = "backendA")
+public class CircuitBreakTypeWrapper {
+ @Reference(interfaceClass = CircuitBreakerService.class)
+ private CircuitBreakerService circuitBreakerService;
-// @HystrixCommand(fallbackMethod = "reliable")
- public String doSayHello(String name) {
- return annotationService.sayHello(name);
+ public String say(String name) {
+ return circuitBreakerService.say(name);
}
-
- public String reliable(String name) {
- return "hystrix fallback value";
- }
-
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakerAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakerAction.java
new file mode 100644
index 0000000..0c47b29
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/CircuitBreakerAction.java
@@ -0,0 +1,138 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4jboot2.consumer.action;
+
+import io.github.resilience4j.circuitbreaker.CircuitBreakerOpenException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * AnnotationAction
+ */
+@Component("circuitBreakerAction")
+public class CircuitBreakerAction {
+
+ @Autowired
+ private CircuitBreakTypeWrapper circuitBreakTypeWrapper;
+
+ @Autowired
+ private CircuitBreakMethodWrapper circuitBreakMethodWrapper;
+
+
+ private Thread circuitBreakerThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ {
+ int i = 0;
+ while (true) {
+ doSayCircuitBreaker("off", "circuitBreaker", 20, ++i);
+ doSayCircuitBreaker("on", "circuitBreaker", 25, ++i);
+ doSayCircuitBreaker("half", "circuitBreaker", 30, ++i);
+ doSayCircuitBreaker("off", "circuitBreaker", 30, ++i);
+ doSayCircuitBreaker("half", "circuitBreaker", 30, ++i);
+ doSayCircuitBreaker("off", "circuitBreaker", 15, ++i);
+ }
+ }
+ }
+ });
+
+ private Thread circuitBreakerMethodThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ {
+ int i = 0;
+ while (true) {
+ doSayCircuitBreakerMethod("off", "circuitBreaker", 20,
++i);
+ doSayCircuitBreakerMethod("on", "circuitBreaker", 8, ++i);
+ doSayCircuitBreakerMethod("half", "circuitBreaker", 30,
++i);
+ doSayCircuitBreakerMethod("off", "circuitBreaker", 30,
++i);
+ doSayCircuitBreakerMethod("half", "circuitBreaker", 30,
++i);
+ doSayCircuitBreakerMethod("off", "circuitBreaker", 32,
++i);
+ }
+ }
+ }
+ });
+
+ public void sayCircuitBreaker() {
+ if (circuitBreakerThread.getState() == Thread.State.NEW) {
+ circuitBreakerThread.start();
+ }
+ }
+
+ public void suspendCircuitBreaker() {
+ circuitBreakerThread.suspend();
+ }
+
+ public void resumeCircuitBreaker() {
+ circuitBreakerThread.resume();
+
+ }
+
+ private void doSayCircuitBreaker(String tag, String name, int c, int l) {
+ System.out.println("--------------------- start to run circuitBreak: "
+ tag + name + "---------------------");
+ for (int i = 0; i < c; i++) {
+ try {
+ Thread.sleep(20);
+ System.out.print(System.currentTimeMillis() + " - ");
+ System.out.println(circuitBreakTypeWrapper.say(tag + "-" +
name + "=" + l + ":" + i));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (CircuitBreakerOpenException t) {
+ System.err.println("== " + l + ":" + i + " " + t.toString());
+ } catch (Throwable t) {
+ System.err.println("== " + l + ":" + i + " " + t.toString());
+ }
+ }
+ }
+
+
+ public void sayCircuitBreakerMethod() {
+ if (circuitBreakerMethodThread.getState() == Thread.State.NEW) {
+ circuitBreakerMethodThread.start();
+ }
+ }
+
+ public void suspendCircuitBreakerMethod() {
+ circuitBreakerMethodThread.suspend();
+ }
+
+ public void resumeCircuitBreakerMethod() {
+ circuitBreakerMethodThread.resume();
+
+ }
+
+ private void doSayCircuitBreakerMethod(String tag, String name, int c, int
l) {
+ System.out.println("--------------------- start to run circuitBreak: "
+ tag + name + "---------------------");
+ for (int i = 0; i < c; i++) {
+ try {
+ Thread.sleep(20);
+ System.out.print(System.currentTimeMillis() + " - ");
+ System.out.println(circuitBreakMethodWrapper.say(tag + "-" +
name + "=" + l + ":" + i));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (CircuitBreakerOpenException t) {
+ System.err.println("== " + l + ":" + i + " " + t.toString());
+ } catch (Throwable t) {
+ System.err.println("== " + l + ":" + i + " " + t.toString());
+ }
+ }
+ }
+
+}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/RateLimiterAction.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/RateLimiterAction.java
new file mode 100644
index 0000000..2b044c6
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/action/RateLimiterAction.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4jboot2.consumer.action;
+
+import org.apache.dubbo.config.annotation.Reference;
+import org.apache.dubbo.samples.resilience4jboot2.api.RateLimiterService;
+import org.springframework.stereotype.Component;
+
+/**
+ * AnnotationAction
+ */
+@Component("rateLimiterAction")
+public class RateLimiterAction {
+
+ @Reference(interfaceClass = RateLimiterService.class)
+ private RateLimiterService rateLimiterService;
+
+ private Thread rateThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ {
+ int i = 0;
+ while (true) {
+ try {
+ Thread.sleep(40);
+ System.out.println(rateLimiterService.say("rateK" +
(i++), "rateV" + i));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ System.err.println("<<<<<<<<<<<<<<<<<<<<<<<<<< " +
e.getMessage() + " >>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+ }
+ }
+ }
+ }
+ });
+
+
+ public void sayRateLimiter() {
+ if (rateThread.getState() == Thread.State.NEW) {
+ rateThread.start();
+ }
+ }
+
+ public void suspendRateLimiter() {
+ rateThread.suspend();
+ }
+
+ public void resumeRateLimiterr() {
+ rateThread.resume();
+
+ }
+
+
+ public String reliable(String name) {
+ return "hystrix fallback value";
+ }
+
+}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/controller/TestController.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/controller/TestController.java
new file mode 100644
index 0000000..64498ca
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/consumer/controller/TestController.java
@@ -0,0 +1,103 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4jboot2.consumer.controller;
+
+import
org.apache.dubbo.samples.resilience4jboot2.consumer.action.AnnotationAction;
+import
org.apache.dubbo.samples.resilience4jboot2.consumer.action.CircuitBreakerAction;
+import
org.apache.dubbo.samples.resilience4jboot2.consumer.action.RateLimiterAction;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 2018/12/28
+ */
+@RestController
+public class TestController {
+
+ @Autowired
+ private AnnotationAction annotationAction;
+
+ @Autowired
+ private CircuitBreakerAction circuitBreakerAction;
+
+ @Autowired
+ private RateLimiterAction rateLimiterAction;
+
+ @RequestMapping("/test")
+ public String test() {
+ return annotationAction.doSayHello(" test");
+ }
+
+ @RequestMapping("/rate")
+ public String rate() {
+ rateLimiterAction.sayRateLimiter();
+ return "look at console . rate";
+ }
+
+ @RequestMapping("/suspend_rate")
+ public String suspend_rate() {
+ rateLimiterAction.suspendRateLimiter();
+ return "look at console . suspend_rate";
+ }
+
+ @RequestMapping("/resume_rate")
+ public String resume_rate() {
+ rateLimiterAction.resumeRateLimiterr();
+ return "look at console . resume_rate";
+ }
+
+ @RequestMapping("/circuitBreaker")
+ public String circuitBreaker() {
+ circuitBreakerAction.sayCircuitBreaker();
+ return "look at console. circuitBreaker";
+ }
+
+ @RequestMapping("/suspend_circuit_breaker")
+ public String suspend_CircuitBreaker() {
+ circuitBreakerAction.suspendCircuitBreaker();
+ return "look at console . suspend_CircuitBreaker";
+ }
+
+ @RequestMapping("/resume_circuit_breaker")
+ public String resume_CircuitBreaker() {
+ circuitBreakerAction.resumeCircuitBreaker();
+ return "look at console . resume_CircuitBreaker";
+ }
+
+ @RequestMapping("/circuitBreakerMethod")
+ public String circuitBreakerMethod() {
+ circuitBreakerAction.sayCircuitBreakerMethod();
+ return "look at console. circuitBreakerMethod";
+ }
+
+ @RequestMapping("/suspend_circuit_breaker_method")
+ public String suspendCircuitBreakerMethod() {
+ circuitBreakerAction.suspendCircuitBreakerMethod();
+ return "look at console . suspend_CircuitBreakerMethod";
+ }
+
+ @RequestMapping("/resume_circuit_breaker_method")
+ public String resumeCircuitBreakerMethod() {
+ circuitBreakerAction.resumeCircuitBreakerMethod();
+ return "look at console . resume_CircuitBreakerMethod";
+ }
+
+}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/DubbConfiguration.java
similarity index 64%
rename from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
rename to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/DubbConfiguration.java
index 74b849a..4080270 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/api/AnnotationService.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/DubbConfiguration.java
@@ -16,14 +16,17 @@
* limitations under the License.
*
*/
+package org.apache.dubbo.samples.resilience4jboot2.provider;
-package org.apache.dubbo.samples.resilience4j.api;
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
/**
- * AsyncService
+ * 2019/1/2
*/
-public interface AnnotationService {
-
- String sayHello(String name);
-
+@Configuration
+@EnableDubbo(scanBasePackages =
"org.apache.dubbo.samples.resilience4jboot2.provider.impl")
+@PropertySource("classpath:/spring/dubbo-provider.properties")
+public class DubbConfiguration {
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/Resilience4jBootProviderApplication.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/Resilience4jBootProviderApplication.java
new file mode 100644
index 0000000..c3bee83
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/Resilience4jBootProviderApplication.java
@@ -0,0 +1,67 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.samples.resilience4jboot2.provider;
+
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import
org.springframework.boot.context.properties.EnableConfigurationProperties;
+
+import java.io.IOException;
+
+/**
+ * MergeProvider
+ */
+@SpringBootApplication
+//@EnableSpringBootMetricsCollector
+//@EnablePrometheusEndpoint
+@EnableConfigurationProperties
+public class Resilience4jBootProviderApplication implements CommandLineRunner {
+
+ public static void main(String[] args) throws IOException {
+ SpringApplication application = new SpringApplication(new Class<?>[] {
Resilience4jBootProviderApplication.class });
+ application.setAdditionalProfiles("provider");
+ application.run(args);
+ }
+
+ @Override
+ public void run(String... args) throws Exception {
+ Thread.currentThread().join();
+ }
+
+// @Bean
+// public HealthIndicator backendA(CircuitBreakerRegistry
circuitBreakerRegistry){
+// return new
CircuitBreakerHealthIndicator(circuitBreakerRegistry.circuitBreaker("backendA"));
+// }
+//
+// @Bean
+// public HealthIndicator backendB(CircuitBreakerRegistry
circuitBreakerRegistry){
+// return new
CircuitBreakerHealthIndicator(circuitBreakerRegistry.circuitBreaker("backendB"));
+// }
+
+// @Bean
+// public ProviderConfig providerConfig() {
+// ProviderConfig providerConfig = new ProviderConfig();
+// providerConfig.setTimeout(1000);
+// return providerConfig;
+// }
+
+}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/AnnotationServiceImpl.java
similarity index 77%
rename from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
rename to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/AnnotationServiceImpl.java
index cc2e9f7..ee8175c 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4j/impl/AnnotationServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/AnnotationServiceImpl.java
@@ -17,24 +17,24 @@
*
*/
-package org.apache.dubbo.samples.resilience4j.impl;
+package org.apache.dubbo.samples.resilience4jboot2.provider.impl;
import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.samples.resilience4j.api.AnnotationService;
+import org.apache.dubbo.samples.resilience4jboot2.api.AnnotationService;
/**
* AsyncServiceImpl
*/
-@Service
+@Service(interfaceClass = AnnotationService.class)
public class AnnotationServiceImpl implements AnnotationService {
-// @HystrixCommand(commandProperties = { @HystrixProperty(name =
"circuitBreaker.requestVolumeThreshold", value = "10"),
+ // @HystrixCommand(commandProperties = { @HystrixProperty(name =
"circuitBreaker.requestVolumeThreshold", value = "10"),
// @HystrixProperty(name =
"execution.isolation.thread.timeoutInMilliseconds", value = "2000") })
@Override
public String sayHello(String name) {
// System.out.println("async provider received: " + name);
// return "annotation: hello, " + name;
- throw new RuntimeException("Exception to show hystrix enabled.");
+ return "Hello, " + name + "! this is annotation.";
}
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/CircuitBreakerServiceImpl.java
similarity index 64%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/CircuitBreakerServiceImpl.java
index 9853d35..0b1a2b2 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/CircuitBreakerServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/CircuitBreakerServiceImpl.java
@@ -16,18 +16,28 @@
* limitations under the License.
*
*/
-package org.apache.dubbo.samples.resilience4j.impl;
+package org.apache.dubbo.samples.resilience4jboot2.provider.impl;
import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.samples.resilience4j.api.CircuitBreakerService;
+import org.apache.dubbo.samples.resilience4jboot2.api.CircuitBreakerService;
+
+import java.util.concurrent.atomic.AtomicLong;
/**
* 2018/12/26
*/
-@Service
+@Service(interfaceClass = CircuitBreakerService.class)
public class CircuitBreakerServiceImpl implements CircuitBreakerService {
+ private AtomicLong count = new AtomicLong(0);
+
@Override
public String say(String name) {
- throw new RuntimeException("Exception to show resilience enabled.");
+ long countLong = count.incrementAndGet();
+ if (name.startsWith("half") && countLong % 20 < 18) {
+ return "Hello " + name + " - " + countLong;
+ } else if (name.startsWith("off")) {
+ return "Hello " + name + " - " + countLong;
+ }
+ throw new RuntimeException("Exception to show resilience enabled." +
name);
}
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/RateLimiterServiceImpl.java
similarity index 79%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/RateLimiterServiceImpl.java
index bccaafc..9b74247 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-filter/src/main/java/org/apache/dubbo/samples/resilience4j/impl/RateLimiterServiceImpl.java
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/java/org/apache/dubbo/samples/resilience4jboot2/provider/impl/RateLimiterServiceImpl.java
@@ -16,17 +16,19 @@
* limitations under the License.
*
*/
-package org.apache.dubbo.samples.resilience4j.impl;
+package org.apache.dubbo.samples.resilience4jboot2.provider.impl;
+import io.github.resilience4j.ratelimiter.annotation.RateLimiter;
import org.apache.dubbo.config.annotation.Service;
-import org.apache.dubbo.samples.resilience4j.api.RateLimiterService;
+import org.apache.dubbo.samples.resilience4jboot2.api.RateLimiterService;
/**
* 2018/12/26
*/
-@Service
+@Service(interfaceClass = RateLimiterService.class)
public class RateLimiterServiceImpl implements RateLimiterService {
@Override
+ @RateLimiter(name = "limiterA")
public String say(String name, String value) {
return "Hello " + name + ", this is rateLimiter. The value is :" +
value;
}
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-consumer.yml
similarity index 85%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-consumer.yml
index 96ab667..a553f43 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-consumer.yml
@@ -6,17 +6,21 @@
# The ASF licenses this file to You 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.
-#
#
+#
+
+spring:
+ application.name: dubbo-resilience4j-springboot2-consumer
+ jackson.serialization.indent_output: true
+
+server:
+ port: 9082
-dubbo.application.name=annotation-consumer
-dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.consumer.timeout=3000
\ No newline at end of file
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-provider.yml
similarity index 85%
copy from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
copy to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-provider.yml
index 96ab667..9ac9c8e 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application-provider.yml
@@ -6,17 +6,20 @@
# The ASF licenses this file to You 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.
-#
#
+#
+
+spring:
+ application.name: dubbo-resilience4j-springboot2-provider
+ jackson.serialization.indent_output: true
-dubbo.application.name=annotation-consumer
-dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.consumer.timeout=3000
\ No newline at end of file
+server:
+ port: 9080
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/log4j.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application.yml
similarity index 58%
rename from
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/log4j.properties
rename to
dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application.yml
index d6ecd5c..2c52971 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/log4j.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/application.yml
@@ -17,10 +17,24 @@
#
#
-###set log levels###
-log4j.rootLogger=info, stdout
-###output to the console###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}]
%t %5p %c{2}: %m%n
\ No newline at end of file
+resilience4j:
+ circuitbreaker:
+ backends:
+ backendA:
+ ringBufferSizeInClosedState: 10
+ ringBufferSizeInHalfOpenState: 10
+ waitInterval: 6000
+ failureRateThreshold: 20
+# eventConsumerBufferSize: 10
+ backendB:
+ ringBufferSizeInClosedState: 10
+ ringBufferSizeInHalfOpenState: 10
+ waitInterval: 2000
+ failureRateThreshold: 50
+# eventConsumerBufferSize: 10
+ ratelimiter:
+ limiters:
+ limiterA:
+ limitForPeriod: 10
+ limitRefreshPeriodInMillis: 1000
+ timeoutInMillis: 200
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/logback-spring.xml
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..38637bf
--- /dev/null
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/logback-spring.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You 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.
+ ~
+ -->
+<configuration scan="true">
+ <conversionRule conversionWord="clr"
converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+ <conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"
/>
+
+ <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss}
[%thread] %-5level %logger{36} -
+ %msg%n"/>
+
+ <springProperty scope="context" name="application_name"
source="spring.application.name"/>
+ <!--<springProperty scope="context" name="application_version"
source="info.version"/>
+ <springProperty scope="context" name="environment"
source="spring.profiles.active"/>-->
+
+ <jmxConfigurator/>
+
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -
+ %msg%n</pattern>
+ <charset>utf8</charset>
+ </encoder>
+ </appender>
+
+ <root level="INFO">
+ <appender-ref ref="CONSOLE" />
+ </root>
+
+</configuration>
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
index 96ab667..6b645ad 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-consumer.properties
@@ -6,17 +6,18 @@
# The ASF licenses this file to You 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.
-#
+#
#
-dubbo.application.name=annotation-consumer
+dubbo.application.name=resilience4jboot2-annotation-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.consumer.timeout=3000
\ No newline at end of file
+dubbo.consumer.timeout=3000
+dubbo.consumer.retries=-1
diff --git
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-provider.properties
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-provider.properties
index 51fccca..2388cf0 100644
---
a/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-provider.properties
+++
b/dubbo-samples-resilience4j/dubbo-samples-resilience4j-springboot2/src/main/resources/spring/dubbo-provider.properties
@@ -6,18 +6,19 @@
# The ASF licenses this file to You 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.
-#
+#
#
-dubbo.application.name=annotation-provider
+dubbo.application.name=resilience4jboot2-annotation-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
-dubbo.protocol.port=20880
\ No newline at end of file
+dubbo.protocol.port=20880
+dubbo.provider.timeout=1000
diff --git a/dubbo-samples-resilience4j/pom.xml
b/dubbo-samples-resilience4j/pom.xml
index 79b9115..404ea6f 100644
--- a/dubbo-samples-resilience4j/pom.xml
+++ b/dubbo-samples-resilience4j/pom.xml
@@ -32,7 +32,7 @@
<packaging>pom</packaging>
<modules>
<module>dubbo-samples-resilience4j-filter</module>
- <!--<module>dubbo-samples-resilience4j-springboot2</module>-->
+ <module>dubbo-samples-resilience4j-springboot2</module>
</modules>
<properties>
diff --git a/dubbo-samples-spring-boot-hystrix/pom.xml
b/dubbo-samples-spring-boot-hystrix/pom.xml
index 941ccf1..56b5baf 100644
--- a/dubbo-samples-spring-boot-hystrix/pom.xml
+++ b/dubbo-samples-spring-boot-hystrix/pom.xml
@@ -56,6 +56,12 @@
<version>1.4.4.RELEASE</version>
</dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>