分布式架构探索 - 1. RPC框架之Java原生RMI
1. 什么是RPC
RPC(Remote Procedure Call)即远程过程调用,指的是不同机器间系统方法的调用,这和
同机器动态链接库(DLL)有点类似,只不过RPC是不同机器,通过网络通信来访问远程的资源。
2. Java RMI技术
RMI(Remote Method Invocation)即远程方法调用,是Java原生的RPC技术。
* 使用了原生的序列化机制(序列化对象实现java.io.Serializable接口)
* 底层通信基于BIO(Block IO)实现的Socket来完成
* 性能较差
例子:
2-1) 首先,定义远程对外服务接口
// 必须继承Remote接口
public interface HelloService extends Remote {
String sayHello(String someOne) throws RemoteException;
}
2-2) 远程接口的实现
// UnicastRemoteObject定义了服务调用方与提供方对象实例,并建立一对一连接
public class HelloServiceImpl extends UnicastRemoteObject implements HelloService { protected HelloServiceImpl() throws RemoteException {
super();
} @Override
public String sayHello(String someOne) throws RemoteException {
return "hello," + someOne;
}
}
2-3) 服务端远程服务启动
// 创建和注册服务
public class ServiceMain {
public static void main(String[] args) throws Exception {
LocateRegistry.createRegistry(8801);
//指定通讯端口,防止被防火墙拦截
RMISocketFactory.setSocketFactory(new CustomerSocketFactory()); HelloService helloService = new HelloServiceImpl();
Naming.bind("rmi://localhost:8801/helloService", helloService);
System.out.println("ServiceMain provide RPC service now.");
}
}
/**
* 指定通讯端口,防止被防火墙拦截
* Created by KG on 2017/3/8.
*/
public class CustomerSocketFactory extends RMISocketFactory {
@Override
public Socket createSocket(String host, int port) throws IOException {
return new Socket(host, port);
} @Override
public ServerSocket createServerSocket(int port) throws IOException {
if (port == 0) {
port = 8501;
}
System.out.println("rmi notify port:" + port);
return new ServerSocket(port);
}
}
2-4) 客户端调用RMI服务
public class ClientMain {
public static void main(String[] args) throws Exception {
//服务引入
HelloService helloService = (HelloService) Naming.lookup("rmi://localhost:8801/helloService");
//调用远程方法
System.out.println("RMI服务器返回的结果是 " + helloService.sayHello("Master HaKu"));
}
}
程序运行结果:
RMI服务器返回的结果是 hello,Master HaKu
分布式架构探索 - 1. RPC框架之Java原生RMI的更多相关文章
- 微服务架构介绍和RPC框架对比
微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...
- 远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo、SpringClound对比
远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo.SpringClound对比 远程服务调用RPC框架介绍,RPC简单的来说就是像调用本地服务一样调用远程服务. 分布式RPC需要 ...
- 分布式架构的基石.简单的 RPC 框架实现(JAVA)
前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...
- 分布式架构探索 - 2. WebService RPC框架之Apache CXF
Apache CXF是一个开源的WebService RPC框架. 例子: 1. 新建一个maven web项目, 添加pom 如下: <?xml version="1.0" ...
- 自定义RPC框架--基于JAVA实现
视频教程地址 DT课堂(原名颜群) 整体思路RPC(Remote Procedure Call),即远程过程调用.使用RPC,可以像使用本地的程序一样使用远程计算机上的程序.RPC使得开发分布式程序更 ...
- GRPC 1.3.4 发布,Google 高性能 RPC 框架(Java C++ Go)
GRPC 1.3.4 发布了,GRPC 是一个高性能.开源.通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架. GRPC ...
- 完全开源Android网络框架 — 基于JAVA原生的HTTP框架
HttpNet网络请求框架基于HttpUrlConnection,采用Client + Request + Call的请求模型,支持https默认证书,数字安全证书.支持http代理!后续将会实现队列 ...
- 分布式架构核心RPC原理
在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变.RPC(Remote Procedure Call Protocol远程过程 ...
- 分布式架构基石RPC的实现原理
RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...
随机推荐
- sql重点题
--https://blog.csdn.net/weixin_39718665/article/details/78161013/*1.用系统管理员登陆,我这里用户名是system,密码是manage ...
- 043 关于 loadrunner 返回 http 500 错误解决思路
这个支持项目中,总是出现500的问题,后来发现是redis总是崩掉. 后来,在压力测试,500的问题,又开始不断出现,虽然不是我自己处理的,但是没少吃苦头. 看了这篇文章,感觉说的还是很有道理,如何来 ...
- AngularJS的Scope和Digest
Angular是一个成熟和强大的JavaScript框架.它也是一个比较庞大的框架,在熟练掌握之前,需要领会它提出的很多新概念.很多Web开发人员涌向Angular,有不少人面临同样的障碍.Diges ...
- jarvis OJ WEB题目writeup
0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...
- .net(二)
1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何 ...
- 想造轮子的时候,ctrl+f一下
Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...
- angular笔记_2
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- padding和margin设置成百分比
Margin和Padding是我们在网页设计经常使用到的CSS样式,他们分别是间距和填充,一个作用于盒子外面,一个作用于盒子里面,默认的情况下,这些属性的值都会被计算在盒子的面积里面,在网页开发中的流 ...
- AGC 002E.Candy Piles(博弈论)
题目链接 \(Description\) 给定\(n\)堆糖,数量分别为\(a_i\).Alice和Bob轮流操作.每次可以吃掉最多的一堆,也可以每堆各吃掉一个.无法操作的人输,求谁能赢. \(n\l ...
- mongodb副本集与分片结合
1.在三个不同服务器上,分别建立副本集: 202服务器: 192.8.123.202:27017 replSet = r202 192.8.123.202:27018 replSet = r202 1 ...