This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-samples.git


The following commit(s) were added to refs/heads/master by this push:
     new bacc30280 Update sentinel sample (#1123)
bacc30280 is described below

commit bacc3028066977e7c0a7b8a0fa266096a108abe6
Author: Ken Liu <[email protected]>
AuthorDate: Fri Apr 5 15:32:53 2024 +0800

    Update sentinel sample (#1123)
---
 1-basic/dubbo-samples-api-idl/pom.xml              | 19 +++++
 .../dubbo/samples/tri/unary/TriUnaryClient.java    |  3 +
 .../dubbo/samples/tri/unary/TriUnaryServer.java    |  2 +
 1-basic/dubbo-samples-api/pom.xml                  | 19 +++++
 .../apache/dubbo/samples/provider/Application.java |  2 +
 .../dubbo-samples-sentinel/case-configuration.yml  |  4 +-
 .../dubbo-samples-sentinel/case-versions.conf      |  2 +-
 .../apache/dubbo/samples/sentinel/DemoService.java |  6 ++
 .../dubbo-samples-sentinel-consumer/pom.xml        | 15 +++-
 .../samples/consumer/ConsumerApplication.java      | 93 ++++++++++++++++++++++
 .../src/main/resources/application.properties      |  6 --
 .../dubbo-samples-sentinel-provider/pom.xml        |  2 +-
 .../dubbo/samples/provider/DemoServiceImpl.java    | 16 ++++
 .../samples/provider/ProviderApplication.java      | 44 +++++++++-
 .../src/main/resources/application.properties      |  8 +-
 15 files changed, 220 insertions(+), 21 deletions(-)

diff --git a/1-basic/dubbo-samples-api-idl/pom.xml 
b/1-basic/dubbo-samples-api-idl/pom.xml
index 60ee2a5af..0f65a4e8c 100644
--- a/1-basic/dubbo-samples-api-idl/pom.xml
+++ b/1-basic/dubbo-samples-api-idl/pom.xml
@@ -58,11 +58,30 @@
             <version>${protobuf-java.version}</version>
         </dependency>
 
+        <!-- SLF4J API -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.30</version>
+        </dependency>
+        <!-- Log4j2 to SLF4J Bridge -->
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-slf4j-impl</artifactId>
             <version>${log4j2.version}</version>
         </dependency>
+        <!-- Log4j2 Core -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
+        <!-- Log4j2 API -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryClient.java
 
b/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryClient.java
index afa2d3cfa..48048020d 100644
--- 
a/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryClient.java
+++ 
b/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryClient.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.samples.tri.unary;
 
 import org.apache.dubbo.config.ReferenceConfig;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.bootstrap.builders.ApplicationBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -30,6 +31,8 @@ public class TriUnaryClient {
 
     public static void main(String[] args) throws IOException {
         DubboBootstrap bootstrap = DubboBootstrap.getInstance();
+        
bootstrap.application(ApplicationBuilder.newBuilder().name("dubbo-samples-api-idl-client").logger("slf4j").build());
+
         ReferenceConfig<Greeter> ref = new ReferenceConfig<>();
         ref.setInterface(Greeter.class);
         ref.setUrl("tri://localhost:50052");
diff --git 
a/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryServer.java
 
b/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryServer.java
index afbf1586d..90f5c4886 100644
--- 
a/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryServer.java
+++ 
b/1-basic/dubbo-samples-api-idl/src/main/java/org/apache/dubbo/samples/tri/unary/TriUnaryServer.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.constants.CommonConstants;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.ServiceConfig;
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.bootstrap.builders.ApplicationBuilder;
 
 import java.io.IOException;
 
@@ -32,6 +33,7 @@ public class TriUnaryServer {
         service.setRef(new GreeterImpl("tri-stub"));
 
         DubboBootstrap bootstrap = DubboBootstrap.getInstance();
+        
bootstrap.application(ApplicationBuilder.newBuilder().name("dubbo-samples-api-idl-server").logger("slf4j").build());
         bootstrap.protocol(new ProtocolConfig(CommonConstants.TRIPLE, 50052))
                 .service(service)
                 .start().await();
diff --git a/1-basic/dubbo-samples-api/pom.xml 
b/1-basic/dubbo-samples-api/pom.xml
index e705c4d5b..6363dbabc 100644
--- a/1-basic/dubbo-samples-api/pom.xml
+++ b/1-basic/dubbo-samples-api/pom.xml
@@ -52,11 +52,30 @@
             <version>${dubbo.version}</version>
         </dependency>
 
+        <!-- SLF4J API -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.30</version>
+        </dependency>
+        <!-- Log4j2 to SLF4J Bridge -->
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-slf4j-impl</artifactId>
             <version>${log4j2.version}</version>
         </dependency>
+        <!-- Log4j2 Core -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
+        <!-- Log4j2 API -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>${log4j2.version}</version>
+        </dependency>
 
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git 
a/1-basic/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/provider/Application.java
 
b/1-basic/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/provider/Application.java
index 4018c11bc..e0e0c4d52 100644
--- 
a/1-basic/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/provider/Application.java
+++ 
b/1-basic/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/provider/Application.java
@@ -18,6 +18,7 @@
 package org.apache.dubbo.samples.provider;
 
 import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.config.bootstrap.builders.ApplicationBuilder;
 import org.apache.dubbo.config.bootstrap.builders.ProtocolBuilder;
 import org.apache.dubbo.config.bootstrap.builders.ServiceBuilder;
 import org.apache.dubbo.samples.api.GreetingsService;
@@ -25,6 +26,7 @@ import org.apache.dubbo.samples.api.GreetingsService;
 public class Application {
     public static void main(String[] args) {
         DubboBootstrap.getInstance()
+                
.application(ApplicationBuilder.newBuilder().name("dubbo-samples-api").logger("slf4j").build())
                 
.protocol(ProtocolBuilder.newBuilder().name("tri").port(50052).build())
                 
.service(ServiceBuilder.newBuilder().interfaceClass(GreetingsService.class).ref(new
 GreetingsServiceImpl()).build())
                 .start()
diff --git a/4-governance/dubbo-samples-sentinel/case-configuration.yml 
b/4-governance/dubbo-samples-sentinel/case-configuration.yml
index efd50a846..eb9f8c692 100644
--- a/4-governance/dubbo-samples-sentinel/case-configuration.yml
+++ b/4-governance/dubbo-samples-sentinel/case-configuration.yml
@@ -36,7 +36,7 @@ services:
     waitPortsBeforeRun:
       - nacos:8848
     checkPorts:
-      - 20880
+      - 50051
     depends_on:
       - nacos
 
@@ -50,7 +50,7 @@ services:
       - nacos.port=8848
     waitPortsBeforeRun:
       - nacos:8848
-      - dubbo-samples-sentinel-provider:20880
+      - dubbo-samples-sentinel-provider:50051
     depends_on:
       - nacos
       - dubbo-samples-sentinel-provider
diff --git a/4-governance/dubbo-samples-sentinel/case-versions.conf 
b/4-governance/dubbo-samples-sentinel/case-versions.conf
index 3d18292ed..500e08b13 100644
--- a/4-governance/dubbo-samples-sentinel/case-versions.conf
+++ b/4-governance/dubbo-samples-sentinel/case-versions.conf
@@ -19,6 +19,6 @@
 
 # Supported component versions of the test case
 
-dubbo.version= [ >= 3.2.0 ]
+dubbo.version= [ >= 3.3.* ]
 java.version= [ >= 17 ]
 sentinel.version= [ >= 1.8.6 ]
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-api/src/main/java/org/apache/dubbo/samples/sentinel/DemoService.java
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-api/src/main/java/org/apache/dubbo/samples/sentinel/DemoService.java
index fc97801c5..2ee66359b 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-api/src/main/java/org/apache/dubbo/samples/sentinel/DemoService.java
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-api/src/main/java/org/apache/dubbo/samples/sentinel/DemoService.java
@@ -19,4 +19,10 @@ package org.apache.dubbo.samples.sentinel;
 public interface DemoService {
 
     String sayHello(String name);
+
+    String sayHelloAgain(String name);
+
+    String sayHelloConsumerFlowControl(String name);
+
+    String sayHelloConsumerDowngrade(String name);
 }
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/pom.xml 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/pom.xml
index f579dfc7f..2a682e243 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/pom.xml
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/pom.xml
@@ -38,7 +38,8 @@
         <maven.compiler.target>1.8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
-        <dubbo.version>3.2.6</dubbo.version>
+        <sentinel.version>1.8.6</sentinel.version>
+        <dubbo.version>3.3.0-beta.1</dubbo.version>
         <nacos.version>2.2.0</nacos.version>
     </properties>
 
@@ -80,6 +81,18 @@
             <artifactId>spring-boot-starter-log4j2</artifactId>
         </dependency>
 
+        <!-- sentinel dependency-->
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-apache-dubbo3-adapter</artifactId>
+            <version>${sentinel.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.csp</groupId>
+            <artifactId>sentinel-transport-simple-http</artifactId>
+            <version>${sentinel.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/java/org/apache/dubbo/samples/consumer/ConsumerApplication.java
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/java/org/apache/dubbo/samples/consumer/ConsumerApplication.java
index 732361506..404abaf7f 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/java/org/apache/dubbo/samples/consumer/ConsumerApplication.java
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/java/org/apache/dubbo/samples/consumer/ConsumerApplication.java
@@ -16,7 +16,16 @@
  */
 package org.apache.dubbo.samples.consumer;
 
+import com.alibaba.csp.sentinel.adapter.dubbo3.config.DubboAdapterGlobalConfig;
+import com.alibaba.csp.sentinel.slots.block.RuleConstant;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
+import 
com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+import com.alibaba.dubbo.rpc.RpcResult;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.dubbo.rpc.AsyncRpcResult;
 import org.apache.dubbo.samples.sentinel.DemoService;
 
 import org.slf4j.Logger;
@@ -26,6 +35,10 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
@@ -45,12 +58,19 @@ public class ConsumerApplication {
 
         @Override
         public void run(String... args) {
+            // please run triggerProviderFlowControl() or 
triggerConsumerFlowControl() separately to verify provider and consumer side 
flow control.
+//            triggerProviderFlowControl();
+            triggerConsumerFlowControl();
+        }
+
+        private void triggerProviderFlowControl() {
             Executors.newScheduledThreadPool(1)
                     .scheduleAtFixedRate(() -> {
                         logger.info("Start to call remote.");
                         for (int i = 0; i < 15; i++) {
                             try {
                                 String result = demoService.sayHello("dubbo");
+                                demoService.sayHelloAgain("dubbo");
                                 logger.info("Call Count:" + i + " Dubbo Remote 
Return ======> " + result);
                             } catch (RuntimeException ex) {
                                 if 
(ex.getMessage().contains("SentinelBlockException: FlowException")) {
@@ -62,5 +82,78 @@ public class ConsumerApplication {
                         }
                     }, 0, 5000, TimeUnit.MILLISECONDS);
         }
+
+        private void triggerConsumerFlowControl() {
+            CountDownLatch latch = new CountDownLatch(5);
+            for (int i = 0; i < 8; i++) {
+                Executors.newFixedThreadPool(1)
+                        .submit(() -> {
+                            latch.await();
+                            while(true) {
+                                logger.info("Start to call remote.");
+                                try {
+                                    String result = 
demoService.sayHelloConsumerFlowControl("dubbo");
+                                    
demoService.sayHelloConsumerDowngrade("dubbo");
+                                    logger.info("Call Dubbo Remote Return 
======> " + result);
+                                }
+                                catch (RuntimeException ex) {
+                                    if 
(ex.getMessage().contains("SentinelBlockException: FlowException")) {
+                                        logger.info("Call Blocked");
+                                    }
+                                    else {
+                                        logger.error("Call Request Failed.", 
ex);
+                                    }
+                                }
+                                Thread.sleep(5000);
+                            }
+                        });
+                latch.countDown();
+            }
+        }
     }
+
+    @Component
+    static class SentinelConfig implements CommandLineRunner {
+        @Override
+        public void run(String... args) {
+            FlowRule flowRule = new FlowRule();
+            
flowRule.setResource("org.apache.dubbo.samples.sentinel.DemoService:sayHelloConsumerFlowControl(java.lang.String)");
+            flowRule.setCount(3);
+            flowRule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
+            FlowRuleManager.loadRules(Collections.singletonList(flowRule));
+        }
+    }
+
+    @Component
+    static class SentinelCallbackConfig implements CommandLineRunner {
+        @Override
+        public void run(String... args) {
+            // Register fallback handler for consumer.
+            // If you only want to handle degrading, you need to
+            // check the type of BlockException.
+            DubboAdapterGlobalConfig.setConsumerFallback((invoker, invocation, 
ex) -> {
+                System.out.println("Blocked by Sentinel: " + 
ex.getClass().getSimpleName() + ", " + invocation);
+                return 
AsyncRpcResult.newDefaultAsyncResult(ex.toRuntimeException(), invocation);
+            });
+        }
+    }
+
+    @Component
+    static class SentinelDowngradeConfig implements CommandLineRunner {
+        @Override
+        public void run(String... args) {
+            List<DegradeRule> rules = new ArrayList<>();
+            DegradeRule rule = new DegradeRule();
+            
rule.setResource("org.apache.dubbo.samples.sentinel.DemoService:sayHelloConsumerDowngrade(java.lang.String)");
+            rule.setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());
+            rule.setCount(0.2); // Threshold is 20% error ratio
+            rule.setMinRequestAmount(3);
+            rule.setStatIntervalMs(10000); // 10s
+            rule.setTimeWindow(10);
+            rules.add(rule);
+            DegradeRuleManager.loadRules(rules);
+        }
+    }
+
+
 }
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/resources/application.properties
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/resources/application.properties
index 2bfc99705..e81778f3d 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/resources/application.properties
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-consumer/src/main/resources/application.properties
@@ -15,10 +15,4 @@
 
 # Specify the application name of Dubbo
 dubbo.application.name=sentinel-consumer
-
-# Enable token verification for each invocation
-dubbo.provider.token=true
-
-# Specify the registry address
-# dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos
 
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/pom.xml 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/pom.xml
index 2513aac36..88dddbf87 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/pom.xml
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/pom.xml
@@ -37,7 +37,7 @@
         <maven.compiler.target>1.8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
-        <dubbo.version>3.2.6</dubbo.version>
+        <dubbo.version>3.3.0-beta.1</dubbo.version>
         <nacos.version>2.2.0</nacos.version>
         <sentinel.version>1.8.6</sentinel.version>
     </properties>
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/DemoServiceImpl.java
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/DemoServiceImpl.java
index af189382c..badcdea34 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/DemoServiceImpl.java
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/DemoServiceImpl.java
@@ -25,4 +25,20 @@ public class DemoServiceImpl implements DemoService {
     public String sayHello(String name) {
         return "hello, "+ name;
     }
+
+    @Override
+    public String sayHelloAgain(String name) {
+        return "hello, "+ name;
+    }
+
+    @Override
+    public String sayHelloConsumerFlowControl(String name) {
+        return "hello, "+ name;
+    }
+
+    @Override
+    public String sayHelloConsumerDowngrade(String name) {
+        return "hello, "+ name;
+    }
+
 }
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/ProviderApplication.java
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/ProviderApplication.java
index f107dfd22..14440fd6a 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/ProviderApplication.java
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/java/org/apache/dubbo/samples/provider/ProviderApplication.java
@@ -16,7 +16,10 @@
  */
 package org.apache.dubbo.samples.provider;
 
+import com.alibaba.csp.sentinel.adapter.dubbo3.config.DubboAdapterGlobalConfig;
+import com.alibaba.dubbo.rpc.RpcResult;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.apache.dubbo.rpc.AsyncRpcResult;
 import org.apache.dubbo.samples.sentinel.DemoService;
 
 import com.alibaba.csp.sentinel.slots.block.RuleConstant;
@@ -37,15 +40,48 @@ public class ProviderApplication {
         SpringApplication.run(ProviderApplication.class, args);
     }
 
+    // Service level QOS flow control
     @Component
-    static class SentinelConfig implements CommandLineRunner {
+    static class SentinelServiceConfig implements CommandLineRunner {
         @Override
         public void run(String... args) {
             // Limit DemoService to 10 QPS
-            FlowRule flowRule = new FlowRule(DemoService.class.getName())
-                    .setCount(10)
-                    .setGrade(RuleConstant.FLOW_GRADE_QPS);
+            FlowRule flowRule = new FlowRule();
+            // Note: the resource name here is the interface name.
+            flowRule.setResource(DemoService.class.getName());
+            flowRule.setCount(10);
+            flowRule.setLimitApp("default");
+            flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
             FlowRuleManager.loadRules(Collections.singletonList(flowRule));
         }
     }
+
+    // Method level QOS flow control
+    @Component
+    static class SentinelMethodConfig implements CommandLineRunner {
+        @Override
+        public void run(String... args) {
+            // Limit DemoService.sayHelloAgain() method to 5 QPS.
+            FlowRule flowRule = new FlowRule();
+            // Note: the resource name here includes the method signature.
+            flowRule.setResource(DemoService.class.getName() + 
":sayHelloAgain(java.lang.String)");
+            flowRule.setCount(5);
+            // Note: this will take effect only for the specific consumer 
whose app name is "sentinel-consumer".
+            flowRule.setLimitApp("sentinel-consumer");
+            flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
+            FlowRuleManager.loadRules(Collections.singletonList(flowRule));
+        }
+    }
+
+    // Set method gets executed when flow control happens.
+    @Component
+    static class SentinelCallbackConfig implements CommandLineRunner {
+        @Override
+        public void run(String... args) {
+            DubboAdapterGlobalConfig.setProviderFallback((invoker, invocation, 
ex) -> {
+                System.out.println("Blocked by Sentinel: " + 
ex.getClass().getSimpleName() + ", " + invocation);
+                return 
AsyncRpcResult.newDefaultAsyncResult(ex.toRuntimeException(), invocation);
+            });
+        }
+    }
 }
diff --git 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/resources/application.properties
 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/resources/application.properties
index f3a48f0bf..ad76681b8 100644
--- 
a/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/resources/application.properties
+++ 
b/4-governance/dubbo-samples-sentinel/dubbo-samples-sentinel-provider/src/main/resources/application.properties
@@ -15,10 +15,6 @@
 
 # Specify the application name of Dubbo
 dubbo.application.name=sentinel-provider
-
-# Enable token verification for each invocation
-dubbo.provider.token=true
-
-# Specify the registry address
-# dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos
+dubbo.protocol.name=tri
+dubbo.protocol.port=50051
 
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to