RMI远程方法调用:适用于 客户端 调用 服务器 内的方法;(Kotlin 语言编写)

如果业务为二个服务器之间的通信,还是得用消息队列的形式,因为RMI 不适合 双向 调用

下面介绍RMI 的使用方法:

1,服务器端代码:

定义接口(此接口放入服务端和客户端公用的模块 或者打成jar给服务器/客户端使用)

 interface RmiService {

     /**
* 订单发货
* @param saleItemId BTB订单项 itemId
* @param shipmentName 物流公司名称
* @param shipmentNumber 物流单号
*
*/
fun shippedSale(saleItemId: Long, shipmentName: String, shipmentNumber: String): RestResponse<Any>
}

定义实现类

 @Service
class RmiServiceImpl : RmiService { @Autowired
private lateinit var supplierSaleService: SupplierSaleService /**
* 订单发货
* @param saleItemId BTB订单项 itemId
* @param shipmentName 物流公司名称
* @param shipmentNumber 物流单号
*
*/
override fun shippedSale(saleItemId: Long, shipmentName: String, shipmentNumber: String): RestResponse<Any> {
return supplierSaleService.shippedSale(saleItemId, shipmentName, shipmentNumber)
} }

注册RMI服务

 @Component
class RegistryExporter { @Autowired
private lateinit var rmiService: RmiService @Bean
fun rmiServiceExporter(): RmiServiceExporter {
val exporter = RmiServiceExporter()
exporter.service = rmiService
exporter.serviceInterface = RmiService::class.java
exporter.setServiceName("SERVER_NAME")
exporter.setRegistryPort(RmiServiceConstants.REGISTRY_PORT)
return exporter
} }

2.客户端代码:

通过RMI代理实例化接口(即 服务器定义的接口)

  @Bean("rmiService")
fun rmiService(): RmiProxyFactoryBean {
//创建rmi的代理
val rmiProxyFactoryBean = RmiProxyFactoryBean()
//访问rmi,ip,端口,和rmi名字
rmiProxyFactoryBean.serviceUrl = "rmi://${RmiServiceConstants.SERVER_HOST}:${RmiServiceConstants.REGISTRY_PORT}/" + RmiServiceConstants.SERVER_NAME
//设置代理类代理的接口
rmiProxyFactoryBean.serviceInterface = RmiService::class.java
return rmiProxyFactoryBean
}

调用接口

 @Autowired
private lateinit var rmiService: RmiService fun test(){
rmiService.addSupplierSale(saleId)
}

RMI远程方法调用的更多相关文章

  1. Java RMI远程方法调用

    RMI(远程接口调用) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传 ...

  2. 简单实现Java的RMI——远程方法调用

    一.RMI简介: 说到RMI就不得不说RPC了. RPC:(Remote Procedure Call),远程过程调用. RMI(Remote Method Invocation),远程方法调用. R ...

  3. Java APi 之 RMI远程方法调用

    一.什么是RPC RPC全称是remote procedure call,即远程过程调用.它是一种协议,用于从远程计算机上请求服务. 例如有两台服务器A和B,A上的应用想要调用B上应用的方法,但是他们 ...

  4. Java RMI 远程方法调用

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  5. 【Java Web开发学习】远程方法调用RMI

    Java RMI 远程方法调用Remote Method Invocation 转载:http://www.cnblogs.com/yangchongxing/p/9078061.html 1.创建远 ...

  6. SpringBoot里使用RMI进行远程方法调用

    一.Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程 ...

  7. [转]Java远程方法调用

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

  8. RMI远端方法调用

    一.RMI介绍 RMI(Remote Method Invocation),RMI是分布式对象软件包,它简化了在多台计算机上的JAVA应用之间的通信.必须在jdk1.1以上,RMI用到的类:java. ...

  9. XML-RPC远程方法调用

    一.简介 XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列 ...

随机推荐

  1. QBC检索和本地SQL检索

    细说QBC:QBC(Query By Criteria) 查询:这种方式比较面向对象方式,因为是面向对象,所以查询时参数名就是所查询的类的属性名并不是数据库的表的列名重点是有三个描述条件的对象:Res ...

  2. R语言中的聚类的使用

    这里的聚类主要用到K-Means和K-Medoide聚类.在进行聚类之前,为了避免不同参数之间量纲不同所造成的影响,先将数据进行(0-1)标准化 # 如参数weight data$weight < ...

  3. Googlebot (Google Web search)

    w推测“域名解析过程中,Google crawlers中首先是Googlebo中的Google Web search上阵”. +-----+----------------+------------- ...

  4. 研究php单例模式实现数据库类

    实现单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 单例模式的逻辑:类里面声明一个静态的方法和变量,静态变量用 ...

  5. python基础-第八篇-8.1初识Socket

    socket基础 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...

  6. Design Patterns Example Code (in C++)

    Overview Design patterns are ways to reuse design solutions that other software developers have crea ...

  7. myeclipse中更改web项目在tomcat中部署的路径

    右键点击项目名称,选择属性properties,选择myeclipse->web.更改web context-root就可以.

  8. LayoutInflater的动态增加控件

    在实际开发中LayoutInflater这个类是非常有用的,它的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout下xml布局文件. 而findView ...

  9. 【多线程基础】- 多个线程顺序打印ABC

    题目:3个线程名字分别是A,B,C 现在在console上连续打印10次 ABC . public class Test { public static void main(String[] args ...

  10. Vmwaretools

    先下载Vmwaretools  这一步是设置ubuntu的超级用户root的密码我设置为dong  转换为root用户操作 执行 perl程序 然后就是一路Enter,开始关机重启就行了 来自为知笔记 ...