1. 什么是RPC?
RPC(即Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。用来满足分布式系统架构中不同的系统之间的远程通信和相互调用
2. 什么是Dubbo?
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 详情请参考 dubbo中文官网

3. 什么是zookeeper?
zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
4. 安装zookeeper
(1)进入官网下载 ,我们下载3.4.14版本的 zookeeper下载

(2)将zoo_sample.cfg 更名为 zoo.cfg 得到一个新的文件

(3)开启zookeeper ,双击bin目录下的zkServer.cmd

双击之后的效果图: 表示开启成功。

5. 安装dubbo-admin ,监控服务
(1)进入github下载 , 我们下载develop分支,这是最新的分支,采用前后端分离的结构。 dubbo-admin 下载

(2) 使用idea打开后台dubbo-admin-server,并运行

(3)使用vscode打开前台dubbo-admin-ui

(4)再控制台运行前台dubbo-admin-ui
先后执行下面的命令:
- npm install
- npm run dev
(5)运行成功之后,得到如下界面
初始账号:root
初始密码:root

6. 使用dubbo和zookeeper
6.1 编写服务提供者
(1)新建springboot项目provider-server ,作为服务提供者
(2)pom.xml文件引入dubbo和zookeeper
<!--dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zkclient===>zookeeper-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--日志会冲突-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除掉slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
(3)配置application.properties文件
server.port=8001
#服务应用的名字
dubbo.application.name=provider-server
#注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.example.service
(4)编写服务
- 先编写接口TicketService
public interface TicketService {
String getTicketInfo();
}
- 先编写接口的实现类TicketServiceImpl
import com.example.service.TicketService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
//zookeeper服务注册与发现
@Service //此处的Service引入的是dubbo中的,而不是springMvc中的
@Component
public class TicketServiceImpl implements TicketService {
@Override
public String getTicketInfo() {
return "票的信息";
}
}
6.2 编写服务消费者
(1)新建springboot项目consumer-server ,作为服务消费者
(2)pom.xml文件引入dubbo和zookeeper
<!--dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zkclient===>zookeeper-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--日志会冲突-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除掉slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
(3)配置application.properties文件
server.port=8002
#消费者去哪里拿服务,需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
(4)使用服务
消费者需要使用提供者提供的服务,需要再相同目录下面新建一个相同的接口。
- 复制提供者的接口到消费者相同目录的位置
public interface TicketService {
String getTicketInfo();
}
- 消费者使用服务
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service //放到容器中,此处的Server为springMvc的
public class UserService {
//获取provider-server提供的票信息,去注册中心拿
@Reference //引用 1.pom坐标 2.定义路径相同的接口名
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicketInfo();
System.out.println(ticket);
}
}
- 在consumer-server编写测试方法
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.buyTicket();
}
}
- 运行项目provider-server,并运行consumer-server测试方法,最终得到提供者输出的内容。

7. 查看监控界面
可以很清楚的看到,服务成功注册。

本文详细介绍RPC概念,Dubbo框架特性和Zookeeper服务功能,涵盖安装配置、服务注册与发现,以及SpringBoot项目中服务提供者与消费者的实现。
6214

被折叠的 条评论
为什么被折叠?



