RPC在分布式系统中的系统环境建设和应用程序设计中有着广泛的应用,应用包括如下方面: [1]
1、分布式操作系统的进程间通讯
进程间通讯是操作系统必须提供的基本设施之一,分布式操作系统必须提供分布于异构的结点机上进程间的通讯机制,RPC是实现消息传送模式的分布式进程间通讯的手段之一。
2、构造分布式计算的软件环境
由于分布式软件环境本身地理上的分布性, 它的各个组成成份之间存在大量的交互和通讯,R P C 是其基本的实现方法之一。ONC+和DCE两个流行的分式布计算软件环境都是使用RPC构造的,其它一些分布式软件环境也采用了RPC方式。
3、远程数据库服务
在分布式数据库系统中,数据库一般驻存在服务器上,客户机通过远程数据库服务功能访问数据库服务器,现有的远程数据库服务是使用RPC模式的。例如,Sybase和Oracle都提供了存储过程机制,系统与用户定义的存储过程存储在数据库服务器上,用户在客户端使用RPC模式调用存储过程。
4、分布式应用程序设计
RPC机制与RPC工具为分布式应用程序设计提供了手段和方便, 用户可以无需知道网络结构和协议细节而直接使用RPC工具设计分布式应用程序。
5、分布式程序的调试
RPC可用于分布式程序的调试。使用反向RPC使服务器成为客户并向它的客户进程发出RPC,可以调试分布式程序。例如,在服务器上运行一个远端调试程序,它不断接收客户端的RPC,当遇到一个调试程序断点时,它向客户机发回一个RPC,通知断点已经到达,这也是RPC用于进程通讯的例子
提示:以下是本篇文章正文内容,下面案例可供参考
RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`version` int(11) DEFAULT NULL COMMENT '乐观锁',
`deleted` int(1) unsigned zerofill DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
GO
CREATE TABLE `tenthousand` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`version` int(11) DEFAULT NULL COMMENT '乐观锁',
`deleted` int(1) unsigned zerofill DEFAULT '0' COMMENT '逻辑删除',
`status` varchar(10) DEFAULT NULL COMMENT '类型',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
GO
CREATE TABLE `result_again` (
`id` varchar(36) NOT NULL,
`area_code` varchar(255) DEFAULT NULL,
`area_full_name` varchar(255) DEFAULT NULL,
`area_id` varchar(255) DEFAULT NULL,
`area_name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
GO
CREATE TABLE `onethousand` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`version` int(11) DEFAULT NULL COMMENT '乐观锁',
`deleted` int(1) unsigned zerofill DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
GO
CREATE TABLE `onehundred` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`version` int(11) DEFAULT NULL COMMENT '乐观锁',
`deleted` int(1) unsigned zerofill DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
<!--数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.19</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!--HuTool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.6</version>
</dependency>
MybatisPlusCase简单入门
CompletableFuture简单入门
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private Long id;
private String name;
private Integer age;
private String email;
/*创建时间*/
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
/*修改时间*/
@TableField(fill = FieldFill.UPDATE)
private Date gmtModified;
/*乐观锁*/
@Version
private Integer version;
/*逻辑删除*/
@TableLogic
private Integer deleted;
/*类型*/
private String status;
}
@Service
public class InformationService implements Loading {
@Autowired
public UserMapper userMapper;
@Override
public String loader() {
/*延时*/
this.delay();
/*查询信息*/
HashMap<String, Object> map = new HashMap<>();
map.put("status","0");
CompletableFuture<List<User>> list= completableFuture(map);
/*返回结构转String*/
String onStr = JSONObject.toJSONString(list);
return onStr;
}
/*使用CompletableFuture*/
CompletableFuture<List<User>> completableFuture (HashMap<String, Object> map){
return CompletableFuture.supplyAsync(()->{
List<User> list = userMapper.selectByMap(map);
return list;
});
}
}
@Repository
public interface Loading {
String loader();
/*延时300毫秒替代远程调用*/
default void delay() {
try {
Thread.sleep(300L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*开始时间*/
long start = System.currentTimeMillis();
/*获取所有接口调用数据进行存储*/
List<String> list = Arrays.asList(informationService.loader(), orderFormService.loader(), otherService.loader(), resultAgainService.loader(),tenthousandService.loader());
List<CompletableFuture<String>> list8 = list.stream().map(item -> completableFuture7(item)).collect(toList());
List<String> list11 = list8.stream().map(CompletableFuture::join).collect(toList());
long end = System.currentTimeMillis();
System.out.println("总共花费时间:" + (end - start));
return new Result(true, StatusCode.OK, "查询成功", list);
各位看官觉得不错得请不要吝啬自己得三连!谢谢!!!