diff --git a/OpenFeign/README.md b/OpenFeign/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/OpenFeign/pom.xml b/OpenFeign/pom.xml new file mode 100644 index 000000000..a13d526ad --- /dev/null +++ b/OpenFeign/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.netease.lowcode.extension + OpenFeign + 1.0.15 + + + 8 + 8 + UTF-8 + + 2.2.9.RELEASE + + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + ${spring.boot.version} + + + + nasl-metadata-collector + com.netease.lowcode + 0.8.0 + true + + + + + + + com.netease.lowcode + nasl-metadata-maven-plugin + 1.4.2 + + false + false + + + + + archive + + + + + + + \ No newline at end of file diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignAutoScan.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignAutoScan.java new file mode 100644 index 000000000..3872d53d4 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignAutoScan.java @@ -0,0 +1,10 @@ +package com.netease.lowcode.extension; + +import com.netease.lowcode.extension.service.UserService; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackageClasses = {UserService.class}) +public class OpenFeignAutoScan { +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignConfig.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignConfig.java new file mode 100644 index 000000000..dc14ec076 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignConfig.java @@ -0,0 +1,14 @@ +package com.netease.lowcode.extension; + +import com.netease.lowcode.extension.feign.ExtensionUserClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableFeignClients(basePackageClasses = ExtensionUserClient.class) +public class OpenFeignConfig { + + public OpenFeignConfig() { + System.out.println("OpenFeignConfig 扫描成功"); + } +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignEnvironmentPostProcessor.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignEnvironmentPostProcessor.java new file mode 100644 index 000000000..a73641ca0 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/OpenFeignEnvironmentPostProcessor.java @@ -0,0 +1,21 @@ +package com.netease.lowcode.extension; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MapPropertySource; + +import java.util.HashMap; +import java.util.Map; + +public class OpenFeignEnvironmentPostProcessor implements EnvironmentPostProcessor { + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + Map config = new HashMap<>(); + config.put("feign.hystrix.enabled",true); + config.put("hystrix.command.default.circuitBreaker.requestVolumeThreshold",2); + config.put("hystrix.command.default.circuitBreaker.errorThresholdPercentage",0); + + environment.getPropertySources().addLast(new MapPropertySource("OPENFEIGNMAP",config)); + } +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClient.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClient.java new file mode 100644 index 000000000..588fb3a65 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClient.java @@ -0,0 +1,11 @@ +package com.netease.lowcode.extension.feign; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient(name="extensionUserClient",url = "http://dev.nacos.cstest.lcap.codewave-test.163yun.com") +public interface ExtensionUserClient { + + @GetMapping("/rest/hello") + String hello(); +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClientWithFallback.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClientWithFallback.java new file mode 100644 index 000000000..89e7fd476 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/feign/ExtensionUserClientWithFallback.java @@ -0,0 +1,14 @@ +package com.netease.lowcode.extension.feign; + +import com.netease.lowcode.extension.service.ExtensionUserClientFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient(name = "extensionUserClientWithFallback", + url = "http://dev.nacos.cstest.lcap.codewave-test.163yun.com", + fallback = ExtensionUserClientFallback.class) +public interface ExtensionUserClientWithFallback { + + @GetMapping("/rest/hello") + String hello(); +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/service/ExtensionUserClientFallback.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/service/ExtensionUserClientFallback.java new file mode 100644 index 000000000..90f3a65f3 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/service/ExtensionUserClientFallback.java @@ -0,0 +1,13 @@ +package com.netease.lowcode.extension.service; + +import com.netease.lowcode.extension.feign.ExtensionUserClientWithFallback; +import org.springframework.stereotype.Component; + +@Component +public class ExtensionUserClientFallback implements ExtensionUserClientWithFallback { + + @Override + public String hello() { + return "触发熔断"; + } +} diff --git a/OpenFeign/src/main/java/com/netease/lowcode/extension/service/UserService.java b/OpenFeign/src/main/java/com/netease/lowcode/extension/service/UserService.java new file mode 100644 index 000000000..73d7df706 --- /dev/null +++ b/OpenFeign/src/main/java/com/netease/lowcode/extension/service/UserService.java @@ -0,0 +1,45 @@ +package com.netease.lowcode.extension.service; + +import com.netease.lowcode.core.annotation.NaslLogic; +import com.netease.lowcode.extension.feign.ExtensionUserClient; +import com.netease.lowcode.extension.feign.ExtensionUserClientWithFallback; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserService { + + private static ExtensionUserClient extensionUserClient; + private static ExtensionUserClientWithFallback extensionUserClientWithFallback; + + /** + * 普通接口调用 + * 当服务不可用时直接异常 + * + * @return + */ + @NaslLogic + public static String hello() { + return extensionUserClient.hello(); + } + + /** + * 开启熔断器的接口调用 + * 当调用服务不可用时将触发熔断降级 + * + * @return + */ + @NaslLogic + public static String helloWithFallback() { + return extensionUserClientWithFallback.hello(); + } + + @Autowired + public void setUserClient(ExtensionUserClient extensionUserClient) { + UserService.extensionUserClient = extensionUserClient; + } + @Autowired + public void setExtensionUserClientWithFallback(ExtensionUserClientWithFallback extensionUserClientWithFallback){ + UserService.extensionUserClientWithFallback = extensionUserClientWithFallback; + } +} diff --git a/OpenFeign/src/main/resources/META-INF/spring.factories b/OpenFeign/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..8c3091527 --- /dev/null +++ b/OpenFeign/src/main/resources/META-INF/spring.factories @@ -0,0 +1,5 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.netease.lowcode.extension.OpenFeignConfig,\ + com.netease.lowcode.extension.OpenFeignAutoScan +org.springframework.boot.env.EnvironmentPostProcessor=\ + com.netease.lowcode.extension.OpenFeignEnvironmentPostProcessor \ No newline at end of file diff --git "a/OpenFeign/\344\276\235\350\265\226\345\272\223\344\275\277\347\224\250\346\226\207\346\241\243\350\257\264\346\230\216.docx" "b/OpenFeign/\344\276\235\350\265\226\345\272\223\344\275\277\347\224\250\346\226\207\346\241\243\350\257\264\346\230\216.docx" new file mode 100644 index 000000000..e69de29bb