本章完全 参照 dubbo-samples-spring-boot 进行学习而记录。

<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.0modelVersion>
<groupId>top.muquanyugroupId>
<artifactId>springboot-12-dubboartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>2.7.3version>
dependency>
<dependency>
<groupId>com.github.sgroschupfgroupId>
<artifactId>zkclientartifactId>
<version>0.1version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>2.12.0version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-recipesartifactId>
<version>2.12.0version>
dependency>
<dependency>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
<version>3.7.1version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
exclusion>
exclusions>
dependency>
dependencies>
project>
application 的配置server.port=8001
# 服务应用名字
dubbo.application.name=spring-boot-provider
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务需要注册
dubbo.scan.base-packages=top.muquanyu.service
@EnableDubbo 注解,否则 可能 Dubbo 无法生效。
service 层 然后用 dubbo 的 @Service 去实现暴露 注意哟,不是 Spring 的 Service!!是 dubbo 的。
package top.muquanyu.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service // 这个注解 就可以 被 扫描到了,项目一起动,就会被自动注册到 zookeeper
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "暴露服务测试";
}
}


application 配置server.port=8002
# 服务应用名字
dubbo.application.name=spring-boot-provider
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

@Reference // 引用的意思 远程引入我们 暴露的接口package top.muquanyu.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Reference // 引用的意思
// Pom 坐标,可以定义路径相同的 接口名
TicketService ticketServer;
public void test(){
System.out.println(ticketServer.getTicket());
}
}

远程调用成功!RPC 成功!
我们 整个 RPC 的过程:首先 需要 一个 注册中心!然后 SpringBoot 整合 Dubbo 暴露 service 接口。再写 一个 引用 接口的 程序。只要 我知道 注册中心的 url 地址。我就可以 拿到 里面的 service!
思细级恐:想一想,如果 注册中心 是 搭建在 一台 服务器上!那么 我们 是不是 可以 用 这台服务器 做到 其它 计算机/服务器 的 分布式部署呢?因为 我们 可以通过它去 实现 RPC呀 ~ 答案是:肯定的!而且 这种 注册中心的 服务器 甚至 不需要 太高的性能和配置。毕竟 它 就是 一个 传话的。中间件。