Remote Procedure Call 远程过程调用
与之相对的就是本地过程调用(相当于洗碗直接把碗放进洗碗机,打开开关就可以洗了)
远程过程调用就是你不在家,打了电话回家,让你老公去洗碗
在一台电脑中,一个A方法调用了B方法,就是本地调用
方法A在一台电脑上,方法B在另一台电脑里面,此时A方法去调用B方法,就是远程调用
RPC可以使得就像调用本地方法一样去调用远程方法
下面过程就展示了客户端的客户函数怎么去调用服务器端的服务器函数的过程:


RPC里两个核心模块就是通讯和序列化
甲主机的A方法调用乙主机的B方法
我们把乙主机的B方法就叫服务,甲主机的A方法调用这个服务,乙主机提供服务

有两个应用程序,第一个应用程序叫provider-server(提供服务者,被调用服务的)
第二个应用程序consumer-server(调用服务的消费者程序)
启动zookeeper
然后两个应用程序中都要引入dubbo和zookeeper的依赖:
导入dubbo和zookeeper的依赖:
org.apache.dubbo
dubbo-spring-boot-starter
3.1.1
引入zookeeper麻烦一些:

接下来就看服务提供者和服务调用者各自的程序长什么样:
服务提供者程序:
public interface TicketService
{
public String getTicket();
}
import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component;@Service //注意这个Service注解是dubbo包里面的Service
@Component
public class TicketServiceImpl implements TicketService
{
@Override
public String getTicket()
{
return "测试成功";
}
}
服务提供者端 在application.properties文件中进行配置:
server.port=8801
#服务应用的名字
dubbo.application.name=provider-server#注册中心地址:本机的2181端口
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描provider-service这个应用下的这个service包,把里面的服务注册到注册中心去
dubbo.scan.base-packages=com.test.service
服务调用者端程序:
@Service
public interface UserService
{
//去注册中心拿到服务
@Reference
TicketService ticketService;
String result=ticketService.getTicket();
System.out.println(result);
}
}
服务调用者端 在application.properties文件中进行配置:
server.port=8802
#消费者应用需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
有了远程调用,就可以实现微服务了
微服务就是把一个项目拆分成很多个小项目
利用rpc就可以实现项目与项目之间的通信