企业神奇中间件-RPC之RMI(上)

作者:媒体转发 时间:2018-06-13 21:40

字号

说了那么久,到底什么是 RMI (Java Remote Method Invocation)呢?我们来看看维基百科的解释。

In computing, the Java Remote Method Invocation (Java RMI) is a Java API that performs remote method invocation, the object-oriented equivalent of remote procedure calls (RPC), with support for direct transfer of serialized Java classes and distributed garbage-collection.

emmm....,就是一个专门给 Java 提供的一个远程方法调用,以及进行实现 RPC 的一个 Java API,可以用来远程传输序列化类,以及实现分布式垃圾回收。完全obbqk,咱今天也分成几个阶段来看看RMI,Java Remote Method Invocation,Java 远程方法调用。具体是怎么玩的,怎么去使用它,又是什么原理。

企业神奇中间件-RPC之RMI(上)

说走咱就走啊,仅需体验三番钟,你揍会甘我一样,爱上介款 RPC 。 首先,看到这个链接。https://github.com/CallMeDJ/BigBanana-rpc.git

小心翼翼打开命令行终端,就那么git clone 一下。

贴心的我已经为你准备好了,你拷贝一下就行了,当然你要是没有 git 那就下载一个。

git clone https://github.com/CallMeDJ/BigBanana-rpc.git

企业神奇中间件-RPC之RMI(上)

然后用 JetBrains 的 IntelliJ IDEA import 一下,喏就这个Import Project,疯狂点下一步就好了。

企业神奇中间件-RPC之RMI(上)

等 IDEA 的界面打开后,然后右键点一下 Provider 的 Run 'Provider.main()'。

企业神奇中间件-RPC之RMI(上)

再右键点一下 Consumer 的  Run 'Consumer.main()'.

企业神奇中间件-RPC之RMI(上)

然后在 console 控制台,瞎打一些东西。然后用全身的力气按一下 Enter ,你会发现,咦,发现有一些数字回显出来。喔雪特你这么这么厉害??恭喜恭喜,你学会了RMI了。

企业神奇中间件-RPC之RMI(上)

emmm...好了,欢迎大家来到 RMI 第二层,上套路,讲代码,这上边这玩意怎么写出来的呢?

Service

首先定义一个服务 HelloService ,有一个名字叫 hello 的方法,返回一个 Integer 。

企业神奇中间件-RPC之RMI(上)

ServiceImpl

实现它!HelloServiceImpl 实现了 HelloService 的 hello 方法,直接返回字符串的 hashCode。

企业神奇中间件-RPC之RMI(上)

至于为什么要 继承 UnicastRemoteObject 呢。文档上的注释是这样的。用来曝露一个拥有对象引用,然后用 JRMP 协议沟通的远程对象。当然看不懂也没关系,就当没看见继续往下走。

/** 

 * Used for exporting a remote object with JRMP and obtaining a stub 

 * that communicates to the remote object. 

 * 

Provider

定义一个 Provider,用来对外暴露服务。

企业神奇中间件-RPC之RMI(上)

先初始化一个 HelloService 服务。

HelloService helloService  = new HelloServiceImpl(); 

生成一个注册表中心,用来将服务注册到这个地方,注意这里一定要先写,不然后边的服务就没法注册上来了。

Registry registry = LocateRegistry.createRegistry(8888); 

将初始化完的服务,注册到注册中心中,这样,其他地方就可以通过注册中心获取到这个服务啦。

Naming.bind("rmi://127.0.0.1:8888/hello",helloService); 

线程池的作用是避免应用被关掉,关键代码其实就上边那三行。

Consumer

好了,轮到 Consumer 了。

企业神奇中间件-RPC之RMI(上)

啦。

寻找一下注册中心。

Registry registry = LocateRegistry.getRegistry(8888); 

把那个名字叫 hello 的服务找出来

HelloService masterService = (HelloService)registry.lookup("hello"); 

把当前 console 的那行值取出来,然后调用一下 HelloService 的服务,打印到 console。

String command = scanner.nextLine(); 

System.out.println(masterService.hello(command)); 

完美~你可以写自己基于 RMI 的服务了。随便找个地方搞一个注册中心,注册一大堆服务上去,其他地方就可以通过这个注册中心调用了了。

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>RPC RM 企业
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接