Maven项目结构
Dubbo-Service
pom
新建一个项目
Dubbo-Service
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<dubbo.version>3.0.7</dubbo.version>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!-- dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- dubbo协议 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-dubbo</artifactId>
</dependency>
<!-- triple协议-->
<!-- <dependency>-->
<!-- <groupId>org.apache.dubbo</groupId>-->
<!-- <artifactId>dubbo-rpc-triple</artifactId>-->
<!-- </dependency>-->
<!-- dubbo-registry-zookeeper 注册中心 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test-->
<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>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 只是 管理依赖,并 不是导入jar包,依赖管理的好处是 不用写版本号!!-->
<dependencyManagement>
<dependencies>
<!-- spring-Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- dubbo协议 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- triple协议-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-triple</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- dubbo-registry-zookeeper 注册中心 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- dubbo-registry- nacos 注册中心 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<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>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.provider.ProviderApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Provide
pom
<!-- 注意修改-->
<parent>
<artifactId>Dubbo-Service</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<!--公共接口依赖,所有接口必须 处于相同路径!!!-->
<dependency>
<groupId>com.example</groupId>
<artifactId>commo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
yaml
spring:
application:
name: dubbo-provider # 服务名称
dubbo:
application:
name: dubbo-provider #dubbo提供者名称
protocol:
name: dubbo #dubbo协议
port: -1
registry:
id: zk-registry
address: zookeeper://192.168.111.101:2181
config-center:
address: zookeeper://192.168.111.101:2181
metadata-report:
address: zookeeper://192.168.111.101:2181
Consumer
pom
<!-- 注意修改-->
<parent>
<artifactId>Dubbo-Service</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<!-- 公共接口依赖,所有接口必须 处于相同路径!!!-->
<dependency>
<groupId>com.example</groupId>
<artifactId>commo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
yaml
spring:
application:
name: dubbo-consumer # 服务名称
server:
port: 8081 #web服务端口,防止端口冲突!!
dubbo:
application:
name: dubbo-consumer #dubbo提供者名称
protocol:
name: dubbo #dubbo协议
port: -1
registry:
id: zk-registry
address: zookeeper://192.168.111.101:2181
config-center:
address: zookeeper://192.168.111.101:2181
metadata-report:
address: zookeeper://192.168.111.101:2181
Common接口
public interface GoodsService {
public String getData(String data);
public String getGoods();
}
在Provide和Consumer中 引入common接口坐标!!!
Provide
启动类加上
@EnableDubbo
注解
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo //启用dubbo
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
实现类,提供服务
@DubboService
@DubboService // 这里的service注解不能使用spring的注解,要使用dubbo中的注解
public class GoodsServiceImpl implements GoodsService {
public String getData(String data) {
return "getData 方法被访问了!data: " + data;
}
public String getGoods() {
return "getGoods 方法被访问了!";
}
}
Consumer
使用服务
@DubboReference
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestBean {
@DubboReference
private GoodsService goodsService;
@GetMapping("/test")
public String test() throws InterruptedException {
System.out.println("success");
String goods = goodsService.getGoods();
return goods;
}
}
消费者如果
不提供服务
,也就是—>不把接口注册到注册中心时,可以不添加@EnableDubbo注解!!!
测试
先启动Zookeeper!!
启动Provide和Consumer