Browse Source

🎉 增加dubbo集成demo

test
smallchill 6 years ago
parent
commit
90f69c9449
  1. 14
      blade-common/src/main/java/org/springblade/common/constant/CommonConstant.java
  2. 9
      blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
  3. 36
      blade-example-api/blade-dubbo-provider-api/pom.xml
  4. 31
      blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/entity/Blog.java
  5. 19
      blade-example-api/blade-dubbo-provider-api/src/main/java/org/springblade/example/provider/rpc/IBlogRpc.java
  6. 43
      blade-example-api/pom.xml
  7. 52
      blade-example/blade-dubbo-consumer/pom.xml
  8. 23
      blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/DubboConsumerApplication.java
  9. 23
      blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/config/ConsumerConfiguration.java
  10. 35
      blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/controller/BlogController.java
  11. 17
      blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogMock.java
  12. 28
      blade-example/blade-dubbo-consumer/src/main/java/org/springblade/example/consumer/rpc/BlogStub.java
  13. 16
      blade-example/blade-dubbo-consumer/src/main/resources/application-dev.yml
  14. 16
      blade-example/blade-dubbo-consumer/src/main/resources/application-prod.yml
  15. 16
      blade-example/blade-dubbo-consumer/src/main/resources/application-test.yml
  16. 51
      blade-example/blade-dubbo-provider/pom.xml
  17. 23
      blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/DubboProviderApplication.java
  18. 12
      blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/controller/BlogController.java
  19. 23
      blade-example/blade-dubbo-provider/src/main/java/org/springblade/example/provider/rpc/BlogRpc.java
  20. 15
      blade-example/blade-dubbo-provider/src/main/resources/application-dev.yml
  21. 17
      blade-example/blade-dubbo-provider/src/main/resources/application-prod.yml
  22. 17
      blade-example/blade-dubbo-provider/src/main/resources/application-test.yml
  23. 44
      blade-example/pom.xml
  24. 2
      blade-service-api/pom.xml
  25. 2
      blade-service/pom.xml
  26. 3
      pom.xml

14
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地址
*

9
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);
}
}

36
blade-example-api/blade-dubbo-provider-api/pom.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>blade-example-api</artifactId>
<groupId>org.springblade</groupId>
<version>2.0.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-dubbo-provider-api</artifactId>
<name>${project.artifactId}</name>
<version>${bladex.project.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</project>

31
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;
}

19
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);
}

43
blade-example-api/pom.xml

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>BladeX-Biz</artifactId>
<groupId>org.springblade</groupId>
<version>2.0.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-example-api</artifactId>
<name>${project.artifactId}</name>
<version>${bladex.project.version}</version>
<packaging>pom</packaging>
<description>BladeX 微服务范例API集合</description>
<modules>
<module>blade-dubbo-provider-api</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
<finalName>${project.name}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<configuration>
<skipDockerBuild>true</skipDockerBuild>
</configuration>
</plugin>
</plugins>
</build>
</project>

52
blade-example/blade-dubbo-consumer/pom.xml

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>blade-example</artifactId>
<groupId>org.springblade</groupId>
<version>2.0.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-dubbo-consumer</artifactId>
<name>${project.artifactId}</name>
<version>${bladex.project.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
<version>${bladex.tool.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
<version>${bladex.tool.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-dubbo-provider-api</artifactId>
<version>${bladex.project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</project>

23
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);
}
}

23
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;
}
}

35
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<Blog> detail(@PathVariable Integer id) {
Blog detail = rpc.detail(id);
return R.data(detail);
}
}

17
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;
}
}

28
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;
}
}
}

16
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}

16
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}

16
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}

51
blade-example/blade-dubbo-provider/pom.xml

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>blade-example</artifactId>
<groupId>org.springblade</groupId>
<version>2.0.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-dubbo-provider</artifactId>
<name>${project.artifactId}</name>
<version>${bladex.project.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
<version>${bladex.tool.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
<version>${bladex.tool.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-dubbo-provider-api</artifactId>
<version>${bladex.project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</project>

23
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);
}
}

12
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 {
}

23
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;
}
}

15
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}

17
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}

17
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}

44
blade-example/pom.xml

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>BladeX-Biz</artifactId>
<groupId>org.springblade</groupId>
<version>2.0.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-example</artifactId>
<name>${project.artifactId}</name>
<version>2.0.0.RELEASE</version>
<packaging>pom</packaging>
<description>BladeX 微服务范例集合</description>
<modules>
<module>blade-dubbo-consumer</module>
<module>blade-dubbo-provider</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-common</artifactId>
<version>${bladex.project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<configuration>
<skipDockerBuild>true</skipDockerBuild>
</configuration>
</plugin>
</plugins>
</build>
</project>

2
blade-service-api/pom.xml

@ -11,7 +11,7 @@
<artifactId>blade-service-api</artifactId>
<name>${project.artifactId}</name>
<version>2.0.0.RELEASE</version>
<version>${bladex.project.version}</version>
<packaging>pom</packaging>
<description>BladeX 微服务API集合</description>

2
blade-service/pom.xml

@ -6,7 +6,7 @@
<artifactId>blade-service</artifactId>
<name>${project.artifactId}</name>
<version>2.0.0.RELEASE</version>
<version>${bladex.project.version}</version>
<packaging>pom</packaging>
<description>BladeX 微服务集合</description>

3
pom.xml

@ -23,6 +23,7 @@
<spring.boot.admin.version>2.1.4</spring.boot.admin.version>
<alibaba.cloud.version>0.9.0.RELEASE</alibaba.cloud.version>
<dubbo.version>2.7.1</dubbo.version>
<spring.boot.version>2.1.5.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR1</spring.cloud.version>
@ -39,6 +40,8 @@
<module>blade-gateway</module>
<module>blade-service</module>
<module>blade-service-api</module>
<module>blade-example</module>
<module>blade-example-api</module>
</modules>
<dependencyManagement>

Loading…
Cancel
Save