diff --git a/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java b/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
index adfde2ca7..a6012494e 100644
--- a/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
+++ b/blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
@@ -18,6 +18,8 @@ package org.springblade.common.constant;
import org.springblade.core.launch.constant.AppConstant;
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
/**
* 通用常量
*
@@ -81,6 +83,18 @@ public interface CommonConstant {
*/
String DEFAULT_PASSWORD = "123456";
+
+ /**
+ * dbuuo提供者
+ */
+ String APPLICATION_DUBBO_PROVIDER_NAME = APPLICATION_NAME_PREFIX + "dubbo-provider";
+
+
+ /**
+ * dbuuo消费者
+ */
+ String APPLICATION_DUBBO_CONSUMER_NAME = APPLICATION_NAME_PREFIX + "dubbo-consumer";
+
/**
* 动态获取nacos地址
*
diff --git a/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java b/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
index 59f5e8ef4..e5e553b94 100644
--- a/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
+++ b/blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
@@ -18,6 +18,7 @@ package org.springblade.common.launch;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.auto.service.AutoService;
+import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.launch.service.LauncherService;
import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -34,9 +35,17 @@ public class LauncherServiceImpl implements LauncherService {
@Override
public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
Properties props = System.getProperties();
+ // 通用注册
props.setProperty("spring.cloud.nacos.discovery.server-addr", CommonConstant.nacosAddr(profile));
props.setProperty("spring.cloud.nacos.config.server-addr", CommonConstant.nacosAddr(profile));
props.setProperty("spring.cloud.sentinel.transport.dashboard", CommonConstant.sentinelAddr(profile));
+ // dubbo注册
+ props.setProperty("dubbo.application.name", appName);
+ props.setProperty("dubbo.application.qos.enable", "false");
+ props.setProperty("dubbo.protocol.name", "dubbo");
+ props.setProperty("dubbo.registry.address", "nacos://" + CommonConstant.nacosAddr(profile));
+ props.setProperty("dubbo.version", AppConstant.APPLICATION_VERSION);
+ props.setProperty("dubbo.scan.base-packages", AppConstant.BASE_PACKAGES);
}
}
diff --git a/blade-example-api/blade-dubbo-provider-api/pom.xml b/blade-example-api/blade-dubbo-provider-api/pom.xml
new file mode 100644
index 000000000..1b618e432
--- /dev/null
+++ b/blade-example-api/blade-dubbo-provider-api/pom.xml
@@ -0,0 +1,36 @@
+
+
+
+ blade-example-api
+ org.springblade
+ 2.0.0.RELEASE
+
+ 4.0.0
+
+ blade-dubbo-provider-api
+ ${project.artifactId}
+ ${bladex.project.version}
+ jar
+
+
+
+ org.apache.dubbo
+ dubbo
+ ${dubbo.version}
+
+
+ org.apache.dubbo
+ dubbo-registry-nacos
+
+
+ com.alibaba.nacos
+ nacos-client
+
+
+ ${dubbo.version}
+
+
+
+
diff --git a/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/entity/Blog.java b/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/entity/Blog.java
new file mode 100644
index 000000000..ec4d8ca39
--- /dev/null
+++ b/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/entity/Blog.java
@@ -0,0 +1,31 @@
+package org.springblade.example.provider.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Blog实体类
+ *
+ * @author Chill
+ */
+@Data
+public class Blog implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private Integer id;
+
+ /**
+ * 标题
+ */
+ private String title;
+ /**
+ * 内容
+ */
+ private String content;
+
+}
diff --git a/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/rpc/IBlogRpc.java b/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/rpc/IBlogRpc.java
new file mode 100644
index 000000000..04eec1f39
--- /dev/null
+++ b/blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/rpc/IBlogRpc.java
@@ -0,0 +1,19 @@
+package org.springblade.example.provider.rpc;
+
+import org.springblade.example.provider.entity.Blog;
+
+/**
+ * RPC接口类
+ *
+ * @author Chill
+ */
+public interface IBlogRpc {
+
+ /**
+ * Blog详情
+ *
+ * @param id 主键
+ * @return
+ */
+ Blog detail(Integer id);
+}
diff --git a/blade-example-api/pom.xml b/blade-example-api/pom.xml
new file mode 100644
index 000000000..96a0dd32e
--- /dev/null
+++ b/blade-example-api/pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ BladeX-Biz
+ org.springblade
+ 2.0.0.RELEASE
+
+ 4.0.0
+
+ blade-example-api
+ ${project.artifactId}
+ ${bladex.project.version}
+ pom
+ BladeX 微服务范例API集合
+
+
+ blade-dubbo-provider-api
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ ${project.name}
+
+
+
+ com.spotify
+ docker-maven-plugin
+ ${docker.plugin.version}
+
+ true
+
+
+
+
+
+
diff --git a/blade-example/blade-dubbo-consumer/pom.xml b/blade-example/blade-dubbo-consumer/pom.xml
new file mode 100644
index 000000000..dca99e9c1
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ blade-example
+ org.springblade
+ 2.0.0.RELEASE
+
+ 4.0.0
+
+ blade-dubbo-consumer
+ ${project.artifactId}
+ ${bladex.project.version}
+ jar
+
+
+
+ org.springblade
+ blade-core-boot
+ ${bladex.tool.version}
+
+
+ org.springblade
+ blade-starter-swagger
+ ${bladex.tool.version}
+
+
+ org.springblade
+ blade-dubbo-provider-api
+ ${bladex.project.version}
+
+
+ org.apache.dubbo
+ dubbo
+ ${dubbo.version}
+
+
+ org.apache.dubbo
+ dubbo-registry-nacos
+
+
+ com.alibaba.nacos
+ nacos-client
+
+
+ ${dubbo.version}
+
+
+
+
+
diff --git a/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/DubboConsumerApplication.java b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/DubboConsumerApplication.java
new file mode 100644
index 000000000..183fe0b60
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/DubboConsumerApplication.java
@@ -0,0 +1,23 @@
+package org.springblade.example.consumer;
+
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.core.cloud.feign.EnableBladeFeign;
+import org.springblade.core.launch.BladeApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
+
+/**
+ * DubboConsumerApplication
+ *
+ * @author Chill
+ */
+@EnableDubbo
+@EnableBladeFeign
+@SpringCloudApplication
+public class DubboConsumerApplication {
+
+ public static void main(String[] args) {
+ BladeApplication.run(CommonConstant.APPLICATION_DUBBO_CONSUMER_NAME, DubboConsumerApplication.class, args);
+ }
+
+}
diff --git a/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/config/ConsumerConfiguration.java b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/config/ConsumerConfiguration.java
new file mode 100644
index 000000000..c1c36221d
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/config/ConsumerConfiguration.java
@@ -0,0 +1,23 @@
+package org.springblade.example.consumer.config;
+
+import org.springblade.core.secure.registry.SecureRegistry;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * ConsumerConfiguration
+ *
+ * @author Chill
+ */
+@Configuration
+public class ConsumerConfiguration {
+
+ @Bean
+ public SecureRegistry secureRegistry() {
+ SecureRegistry secureRegistry = new SecureRegistry();
+ secureRegistry.excludePathPatterns("/blog/**");
+ return secureRegistry;
+ }
+
+
+}
diff --git a/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/controller/BlogController.java b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/controller/BlogController.java
new file mode 100644
index 000000000..93f34d17e
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/controller/BlogController.java
@@ -0,0 +1,35 @@
+package org.springblade.example.consumer.controller;
+
+import org.apache.dubbo.config.annotation.Reference;
+import org.springblade.core.tool.api.R;
+import org.springblade.example.provider.entity.Blog;
+import org.springblade.example.provider.rpc.IBlogRpc;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Blog控制器
+ *
+ * @author Chill
+ */
+@RestController
+@RequestMapping("blog")
+public class BlogController {
+
+ @Reference(
+ version = "${blade.service.version}",
+ mock = "org.springblade.example.consumer.rpc.BlogMock",
+ //stub = "org.springblade.example.consumer.rpc.BlogStub",
+ check = false
+ )
+ private IBlogRpc rpc;
+
+ @GetMapping("detail/{id}")
+ public R detail(@PathVariable Integer id) {
+ Blog detail = rpc.detail(id);
+ return R.data(detail);
+ }
+
+}
diff --git a/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogMock.java b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogMock.java
new file mode 100644
index 000000000..718104952
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogMock.java
@@ -0,0 +1,17 @@
+package org.springblade.example.consumer.rpc;
+
+
+import org.springblade.example.provider.entity.Blog;
+import org.springblade.example.provider.rpc.IBlogRpc;
+
+/**
+ * 降级容错
+ *
+ * @author Chill
+ */
+public class BlogMock implements IBlogRpc {
+ @Override
+ public Blog detail(Integer id) {
+ return null;
+ }
+}
diff --git a/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogStub.java b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogStub.java
new file mode 100644
index 000000000..7a1b297bf
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogStub.java
@@ -0,0 +1,28 @@
+package org.springblade.example.consumer.rpc;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.example.provider.entity.Blog;
+import org.springblade.example.provider.rpc.IBlogRpc;
+
+/**
+ * 本地存根
+ *
+ * @author Chill
+ */
+@Slf4j
+@AllArgsConstructor
+public class BlogStub implements IBlogRpc {
+
+ private IBlogRpc rpc;
+
+ @Override
+ public Blog detail(Integer id) {
+ try {
+ return rpc.detail(id);
+ } catch (Exception ex) {
+ log.error(ex.getMessage());
+ return null;
+ }
+ }
+}
diff --git a/blade-example/blade-dubbo-consumer/src/main/resources/application-dev.yml b/blade-example/blade-dubbo-consumer/src/main/resources/application-dev.yml
new file mode 100644
index 000000000..6aa15938d
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/resources/application-dev.yml
@@ -0,0 +1,16 @@
+#服务器端口
+server:
+ port: 8306
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28306
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.dev.url}
+ username: ${blade.datasource.dev.username}
+ password: ${blade.datasource.dev.password}
+
diff --git a/blade-example/blade-dubbo-consumer/src/main/resources/application-prod.yml b/blade-example/blade-dubbo-consumer/src/main/resources/application-prod.yml
new file mode 100644
index 000000000..017768f0b
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/resources/application-prod.yml
@@ -0,0 +1,16 @@
+#服务器端口
+server:
+ port: 8306
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28306
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.prod.url}
+ username: ${blade.datasource.prod.username}
+ password: ${blade.datasource.prod.password}
+
diff --git a/blade-example/blade-dubbo-consumer/src/main/resources/application-test.yml b/blade-example/blade-dubbo-consumer/src/main/resources/application-test.yml
new file mode 100644
index 000000000..0972d94f5
--- /dev/null
+++ b/blade-example/blade-dubbo-consumer/src/main/resources/application-test.yml
@@ -0,0 +1,16 @@
+#服务器端口
+server:
+ port: 8306
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28306
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.test.url}
+ username: ${blade.datasource.test.username}
+ password: ${blade.datasource.test.password}
+
diff --git a/blade-example/blade-dubbo-provider/pom.xml b/blade-example/blade-dubbo-provider/pom.xml
new file mode 100644
index 000000000..0e86815c5
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/pom.xml
@@ -0,0 +1,51 @@
+
+
+
+ blade-example
+ org.springblade
+ 2.0.0.RELEASE
+
+ 4.0.0
+
+ blade-dubbo-provider
+ ${project.artifactId}
+ ${bladex.project.version}
+ jar
+
+
+
+ org.springblade
+ blade-core-boot
+ ${bladex.tool.version}
+
+
+ org.springblade
+ blade-starter-swagger
+ ${bladex.tool.version}
+
+
+ org.springblade
+ blade-dubbo-provider-api
+ ${bladex.project.version}
+
+
+ org.apache.dubbo
+ dubbo
+ ${dubbo.version}
+
+
+ org.apache.dubbo
+ dubbo-registry-nacos
+
+
+ com.alibaba.nacos
+ nacos-client
+
+
+ ${dubbo.version}
+
+
+
+
diff --git a/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/DubboProviderApplication.java b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/DubboProviderApplication.java
new file mode 100644
index 000000000..b75239cad
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/DubboProviderApplication.java
@@ -0,0 +1,23 @@
+package org.springblade.example.provider;
+
+import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.core.cloud.feign.EnableBladeFeign;
+import org.springblade.core.launch.BladeApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
+
+/**
+ * DubboProviderApplication
+ *
+ * @author Chill
+ */
+@EnableDubbo
+@EnableBladeFeign
+@SpringCloudApplication
+public class DubboProviderApplication {
+
+ public static void main(String[] args) {
+ BladeApplication.run(CommonConstant.APPLICATION_DUBBO_PROVIDER_NAME, DubboProviderApplication.class, args);
+ }
+
+}
diff --git a/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/controller/BlogController.java b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/controller/BlogController.java
new file mode 100644
index 000000000..d17ea3890
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/controller/BlogController.java
@@ -0,0 +1,12 @@
+package org.springblade.example.provider.controller;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Blog控制器
+ *
+ * @author Chill
+ */
+@RestController
+public class BlogController {
+}
diff --git a/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/rpc/BlogRpc.java b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/rpc/BlogRpc.java
new file mode 100644
index 000000000..7dd62c38e
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/rpc/BlogRpc.java
@@ -0,0 +1,23 @@
+package org.springblade.example.provider.rpc;
+
+import org.apache.dubbo.config.annotation.Service;
+import org.springblade.example.provider.entity.Blog;
+
+/**
+ * BlogRpc实现类
+ *
+ * @author Chill
+ */
+@Service(
+ version = "${blade.service.version}"
+)
+public class BlogRpc implements IBlogRpc {
+ @Override
+ public Blog detail(Integer id) {
+ Blog blog = new Blog();
+ blog.setId(id);
+ blog.setTitle("博客标题");
+ blog.setContent("博客内容");
+ return blog;
+ }
+}
diff --git a/blade-example/blade-dubbo-provider/src/main/resources/application-dev.yml b/blade-example/blade-dubbo-provider/src/main/resources/application-dev.yml
new file mode 100644
index 000000000..769726e55
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/resources/application-dev.yml
@@ -0,0 +1,15 @@
+#服务器端口
+server:
+ port: 8305
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28305
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.dev.url}
+ username: ${blade.datasource.dev.username}
+ password: ${blade.datasource.dev.password}
diff --git a/blade-example/blade-dubbo-provider/src/main/resources/application-prod.yml b/blade-example/blade-dubbo-provider/src/main/resources/application-prod.yml
new file mode 100644
index 000000000..b549c7577
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/resources/application-prod.yml
@@ -0,0 +1,17 @@
+#服务器端口
+server:
+ port: 8305
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28305
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.prod.url}
+ username: ${blade.datasource.prod.username}
+ password: ${blade.datasource.prod.password}
+
+
diff --git a/blade-example/blade-dubbo-provider/src/main/resources/application-test.yml b/blade-example/blade-dubbo-provider/src/main/resources/application-test.yml
new file mode 100644
index 000000000..4df76c75d
--- /dev/null
+++ b/blade-example/blade-dubbo-provider/src/main/resources/application-test.yml
@@ -0,0 +1,17 @@
+#服务器端口
+server:
+ port: 8305
+
+dubbo:
+ #协议配置端口
+ protocol:
+ port: 28305
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.test.url}
+ username: ${blade.datasource.test.username}
+ password: ${blade.datasource.test.password}
+
+
diff --git a/blade-example/pom.xml b/blade-example/pom.xml
new file mode 100644
index 000000000..9c5cbdb67
--- /dev/null
+++ b/blade-example/pom.xml
@@ -0,0 +1,44 @@
+
+
+
+ BladeX-Biz
+ org.springblade
+ 2.0.0.RELEASE
+
+ 4.0.0
+
+ blade-example
+ ${project.artifactId}
+ 2.0.0.RELEASE
+ pom
+ BladeX 微服务范例集合
+
+
+ blade-dubbo-consumer
+ blade-dubbo-provider
+
+
+
+
+ org.springblade
+ blade-common
+ ${bladex.project.version}
+
+
+
+
+
+
+ com.spotify
+ docker-maven-plugin
+ ${docker.plugin.version}
+
+ true
+
+
+
+
+
+
diff --git a/blade-service-api/pom.xml b/blade-service-api/pom.xml
index e84cc5910..47b870db8 100644
--- a/blade-service-api/pom.xml
+++ b/blade-service-api/pom.xml
@@ -11,7 +11,7 @@
blade-service-api
${project.artifactId}
- 2.0.0.RELEASE
+ ${bladex.project.version}
pom
BladeX 微服务API集合
diff --git a/blade-service/pom.xml b/blade-service/pom.xml
index 4f95eefd1..4bbbd3953 100644
--- a/blade-service/pom.xml
+++ b/blade-service/pom.xml
@@ -6,7 +6,7 @@
blade-service
${project.artifactId}
- 2.0.0.RELEASE
+ ${bladex.project.version}
pom
BladeX 微服务集合
diff --git a/pom.xml b/pom.xml
index 2a7fb798f..5845f74cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,7 @@
2.1.4
0.9.0.RELEASE
+ 2.7.1
2.1.5.RELEASE
Greenwich.SR1
@@ -39,6 +40,8 @@
blade-gateway
blade-service
blade-service-api
+ blade-example
+ blade-example-api