1、项目搭建
项目结构如下:
2、父项目pom.xml
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wzy</groupId>
<artifactId>spring-boot-dubbo-example</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>api</module>
<module>provider</module>
<module>consumer</module>
</modules>
<name>spring-boot-dubbo-example</name>
<url>http://www.example.com</url>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--使用springboot 2.3.0.RELEASE-->
<spring-boot.version>2.3.0.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!--定义springboot依赖 实际的依赖交给子项目选择-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--定义dubbo依赖 实际的依赖交给子项目选择-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!--定义dubbo服务注册的zookeeper 的版本,实际的依赖交给子项目-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
3、子项目api模块定义接口
public interface ISayHelloService {
String sayyHello();
}
4、服务提供者构建
4.1、provider子项目的pom.xml文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.wzy</groupId>
<artifactId>spring-boot-dubbo-example</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wzy</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--添加springboot web依赖 当然如果不需要使用web的话 直接依赖spring-boot-starter 就好了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--依赖api子项目,进行接口实现-->
<dependency>
<groupId>com.wzy</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!--依赖zookeeper 客户端-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--添加spring-boot-maven-plugin 插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.wzy.provider.ProviderApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4.2、实现ISayHelloService接口并是使用@DubboService注解进行服务定义
在dubbo的2.7.8版本的时候将原来的@Service注解修改为@DubboService了区分于Spring的@Service注解。
@DubboService
public class SayHelloService implements ISayHelloService {
@Override
public String sayyHello() {
return "hello...";
}
}
4.3、配置服务提供者在application.properties中如下配置
spring.application.name=provider
server.port=8080
#定义扫描服务所在的包路径
dubbo.scan.base-packages=com.wzy
#定义发布服务的协议,默认是dubbo协议
dubbo.protocol.name=dubbo
#定义发布服务监听的端口,配置为-1表示随机
dubbo.protocol.port=20880
#定义当前dubbo应用的名称
dubbo.application.name=provider
#配置服务注册与发现中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
4.4、springboot 启动类
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
4.5、服务发布成功展示
zookeeper上节点数据:
5、服务消费者consumer构建
5.1、consumer子项目的pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.wzy</groupId>
<artifactId>spring-boot-dubbo-example</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wzy</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--依赖springboot web 模块,后面我们会使用rest接口进行测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--依赖api子项目,依赖接口-->
<dependency>
<groupId>com.wzy</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--依赖dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!--依赖zookeeper客户端-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--定义springboot maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.wzy.consumer.ConsumerApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4.2、使用@DubboReference定义服务引用
@Service
public class SayHelloService {
@DubboReference(check = false)
private ISayHelloService sayHelloService;
public String say(){
return sayHelloService.sayyHello();
}
}
4.3、编写测试dubbo服务的rest接口
@RestController
public class SayHelloController {
@Autowired
private SayHelloService sayHelloService;
@GetMapping("say")
public String say(){
return sayHelloService.say();
}
}
4.4、dubbo服务消费者配置
spring.application.name=consumer
server.port=8081
#定义消费者的应用名称
dubbo.application.name=consumer
#定义服务扫描包路径
dubbo.scan.base-packages=com.wzy
#配置zookeeper注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
4.5、消费者springboot启动类
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
4.6、启动消费者进行服务测试
使用浏览器测试结果:
6、至此基于注解发布dubbo服务以及整合springboot完美结束。