diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml index 038969241..383703cbd 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml @@ -40,6 +40,11 @@ spring-cloud-starter-feign + + org.springframework.cloud + spring-cloud-starter-alibaba-sentinel + + diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java index 96a623314..dddd3368f 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ConsumerApplication.java @@ -2,6 +2,7 @@ package org.springframework.cloud.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.alibaba.cloud.examples.ConsumerApplication.EchoService; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.feign.EnableFeignClients; @@ -10,6 +11,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestTemplate; /** @@ -20,22 +22,50 @@ import org.springframework.web.client.RestTemplate; @EnableFeignClients public class ConsumerApplication { - @LoadBalanced - @Bean - public RestTemplate restTemplate() { - return new RestTemplate(); - } + @LoadBalanced + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + @FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, configuration = FeignConfiguration.class) + public interface EchoService { + @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) + String echo(@PathVariable("str") String str); + @RequestMapping(value = "/divide", method = RequestMethod.GET) + String divide(@RequestParam("a") Integer a, @RequestParam("b") Integer b); - public static void main(String[] args) { - SpringApplication.run(ConsumerApplication.class, args); - } + @RequestMapping(value = "/notFound", method = RequestMethod.GET) + String notFound(); + } - @FeignClient(name = "service-provider") - public interface EchoService { - @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) - String echo(@PathVariable("str") String str); - } +} + +class FeignConfiguration { + @Bean + public EchoServiceFallback echoServiceFallback() { + return new EchoServiceFallback(); + } +} + +class EchoServiceFallback implements EchoService { + @Override + public String echo(@PathVariable("str") String str) { + return "echo fallback"; + } + + @Override + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return "divide fallback"; + } + + @Override + public String notFound() { + return "notFound fallback"; + } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java index b896691bb..55c751c71 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/TestController.java @@ -6,6 +6,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @@ -15,31 +16,42 @@ import org.springframework.web.client.RestTemplate; @RestController public class TestController { - @Autowired - private RestTemplate restTemplate; - @Autowired - private EchoService echoService; - - - @Autowired - private DiscoveryClient discoveryClient; - - @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) - public String rest(@PathVariable String str) { - return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); - } - @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) - public String feign(@PathVariable String str) { - return echoService.echo(str); - } - - - @RequestMapping(value="/services/{service}",method = RequestMethod.GET) - public Object client(@PathVariable String service){ - return discoveryClient.getInstances(service); - } - @RequestMapping(value="/services",method = RequestMethod.GET) - public Object services(){ - return discoveryClient.getServices(); - } + @Autowired + private RestTemplate restTemplate; + @Autowired + private EchoService echoService; + + @Autowired + private DiscoveryClient discoveryClient; + + @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) + public String rest(@PathVariable String str) { + return restTemplate.getForObject("http://service-provider/echo/" + str, + String.class); + } + + @RequestMapping(value = "/notFound-feign", method = RequestMethod.GET) + public String notFound() { + return echoService.notFound(); + } + + @RequestMapping(value = "/divide-feign", method = RequestMethod.GET) + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return echoService.divide(a, b); + } + + @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) + public String feign(@PathVariable String str) { + return echoService.echo(str); + } + + @RequestMapping(value = "/services/{service}", method = RequestMethod.GET) + public Object client(@PathVariable String service) { + return discoveryClient.getInstances(service); + } + + @RequestMapping(value = "/services", method = RequestMethod.GET) + public Object services() { + return discoveryClient.getServices(); + } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties index 1df160fcc..fbc9736eb 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/application.properties @@ -1,4 +1,12 @@ spring.application.name=service-consumer server.port=18083 management.endpoints.web.exposure.include=* -spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 \ No newline at end of file +spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 + +feign.sentinel.enabled=true + +spring.cloud.sentinel.transport.dashboard=localhost:8080 +spring.cloud.sentinel.eager=true + +spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json +spring.cloud.sentinel.datasource.ds1.file.data-type=json \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/flowrule.json new file mode 100644 index 000000000..3dd011628 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/src/main/resources/flowrule.json @@ -0,0 +1,10 @@ +[ + { + "resource": "GET:http://service-provider/echo/{str}", + "controlBehavior": 0, + "count": 1, + "grade": 1, + "limitApp": "default", + "strategy": 0 + } +] \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java index 169bccd67..843f5cbe0 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ProviderApplication.java @@ -6,6 +6,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -25,5 +26,10 @@ public class ProviderApplication { public String echo(@PathVariable String string) { return "hello Nacos Discovery " + string; } + + @RequestMapping(value = "/divide", method = RequestMethod.GET) + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return String.valueOf(a / b); + } } }