博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot之RMI的使用
阅读量:7043 次
发布时间:2019-06-28

本文共 3777 字,大约阅读时间需要 12 分钟。

  1、RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的。如果方法调用导致,则该异常将指示给调用方。

  2、从我了解RMI开始,我就觉得他和DUBBO的方式差不多,只是dubbo加入了中间件来做管理。RMI在实用性上面还是很不错的。说白了RMI就是像调用本地方法一样调用远程的方法。

  3、这里我写了一个demo,主要是了解RMI的实现过程和配置的方式,spring的xml配置方式可以参考我的这个方式来实现。

  4、目录结构,为了方便,我这边采用模块的形式来写入

  

  5、父模块springrmi的pom.xml主要是引入依赖和管理模块,不涉及任何代码

4.0.0
com.pinnet
springrmi
1.0-SNAPSHOT
do-common
do-client
do-server
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter-web
1.5.9.RELEASE

  6、公共模块do-common这个主要是提供两方共同调用的接口,不涉及业务实现

  

package com.pinnet.service;public interface IUserService {    public String getUser(String name);}

  7、RMIserver,这块主要是提供RMI服务,供远程调用

  yml配置主要是改变端口

server:  port: 8002

  UserServiceImpl主要是实现接口的功能

package com.pinnet.server;import com.pinnet.service.IUserService;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl implements IUserService {    @Override    public String getUser(String name) {        return "result:"+name;    }}

  主要就是相关配置:主要是建立RMI服务。

package com.pinnet.config;import com.pinnet.service.IUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.remoting.rmi.RmiServiceExporter;@Configurationpublic class RmiServer {    @Autowired    private IUserService userService;    @Bean    public RmiServiceExporter getRmiServiceExporter() {        RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();        rmiServiceExporter.setServiceName("userService");        rmiServiceExporter.setService(userService);        rmiServiceExporter.setServiceInterface(IUserService.class);        rmiServiceExporter.setRegistryPort(2002);        return rmiServiceExporter;    }}

  8.RMIclient:客户端主要是调用服务,像调用本地一样

  

  yml:主要是改变端口防止占用

server:  port: 8001

  RMIclient:配置

package com.pinnet.config;import com.pinnet.service.IUserService;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.remoting.rmi.RmiProxyFactoryBean;@Configurationpublic class RmiClient {    @Bean(name = "userService")    public RmiProxyFactoryBean getUserService() {        RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();        rmiProxyFactoryBean.setServiceUrl("rmi://127.0.0.1:2002/userService");        rmiProxyFactoryBean.setServiceInterface(IUserService.class);        return rmiProxyFactoryBean;    }}

  调用:

package com.pinnet.init;import com.pinnet.service.IUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;@Componentpublic class UserInit implements CommandLineRunner {    @Autowired    private IUserService userService;    @Override    public void run(String... strings) throws Exception {        System.out.println(userService.getUser("test"));    }}

  展示:

 

  9、RMI的远程调用方式,很简单也很使用。这个在DUBBO的暴露接口,服务实现的通过zookeeper来注入的过程原理很像。

  所以RMI在使用过程中的实用程度还是很高的。本篇博客仅供参考,如有不对,还请指出。

  10、源码下载:

转载地址:http://yehal.baihongyu.com/

你可能感兴趣的文章
sysbench基准测试
查看>>
决策树
查看>>
Spring Cloud Config采用数据库存储配置内容
查看>>
刨根问底ajax原理与封装
查看>>
关于部署CI/CD的5点建议
查看>>
每天学点Python Cookbook(五)
查看>>
antd-pro添加新页面和新功能
查看>>
ES6 解构赋值
查看>>
交互搜索中的自然语言理解技术
查看>>
ListView vs FlatList性能对比
查看>>
java并发编程学习20--基于springboot的秒杀系统实现2--redis缓存
查看>>
Hybris UI的Route(路由)实现
查看>>
小程序开发之一(使用fly进行http封装)
查看>>
freebsd 镜像重新挂载数据盘
查看>>
Canvas基础知识(一)
查看>>
图鸭发布图片压缩TNG ,将节省55%带宽
查看>>
一个基于Vue.js2的图片浏览组件img-vuer
查看>>
yii2-wx / 微信的服务端验证
查看>>
学习笔记CB007:分词、命名实体识别、词性标注、句法分析树
查看>>
分析用户的地理位置信息
查看>>