RMI远程方法调用

Posted dwb91

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RMI远程方法调用相关的知识,希望对你有一定的参考价值。

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

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

下面介绍RMI 的使用方法:

1,服务器端代码:

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

技术图片
 1 interface RmiService {
 2 
 3     /**
 4      * 订单发货
 5      * @param saleItemId  BTB订单项 itemId
 6      * @param shipmentName  物流公司名称
 7      * @param shipmentNumber  物流单号
 8      *
 9      */
10     fun shippedSale(saleItemId: Long, shipmentName: String, shipmentNumber: String): RestResponse<Any>
11 }
View Code

定义实现类

技术图片
 1 @Service
 2 class RmiServiceImpl : RmiService {
 3 
 4 
 5     @Autowired
 6     private lateinit var supplierSaleService: SupplierSaleService
 7 
 8 
 9     /**
10      * 订单发货
11      * @param saleItemId  BTB订单项 itemId
12      * @param shipmentName  物流公司名称
13      * @param shipmentNumber  物流单号
14      *
15      */
16     override fun shippedSale(saleItemId: Long, shipmentName: String, shipmentNumber: String): RestResponse<Any> {
17         return supplierSaleService.shippedSale(saleItemId, shipmentName, shipmentNumber)
18     }
19 
20 
21 }
View Code

注册RMI服务

技术图片
 1 @Component
 2 class RegistryExporter {
 3 
 4     @Autowired
 5     private lateinit var rmiService: RmiService
 6 
 7     @Bean
 8     fun rmiServiceExporter(): RmiServiceExporter {
 9         val exporter = RmiServiceExporter()
10         exporter.service = rmiService
11         exporter.serviceInterface = RmiService::class.java
12         exporter.setServiceName("SERVER_NAME")
13         exporter.setRegistryPort(RmiServiceConstants.REGISTRY_PORT)
14         return exporter
15     }
16 
17 }
View Code

2.客户端代码:

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

技术图片
 1  @Bean("rmiService")
 2     fun rmiService(): RmiProxyFactoryBean {
 3         //创建rmi的代理
 4         val rmiProxyFactoryBean = RmiProxyFactoryBean()
 5         //访问rmi,ip,端口,和rmi名字
 6         rmiProxyFactoryBean.serviceUrl = "rmi://${RmiServiceConstants.SERVER_HOST}:${RmiServiceConstants.REGISTRY_PORT}/" + RmiServiceConstants.SERVER_NAME
 7         //设置代理类代理的接口
 8         rmiProxyFactoryBean.serviceInterface = RmiService::class.java
 9         return rmiProxyFactoryBean
10     }
View Code

调用接口

技术图片
1 @Autowired
2     private lateinit var rmiService: RmiService
3 
4 fun test(){
5 rmiService.addSupplierSale(saleId)
6 }
View Code

 

以上是关于RMI远程方法调用的主要内容,如果未能解决你的问题,请参考以下文章

RMI远程方法调用

Spring框架实现——远程方法调用RMI代码演示

远程方法调用(RMI)原理与示例

远程方法调用(RMI)原理与示例 (转)

RMI(Remote Method Invocation ) 概念恢复

Java RMI(远程方法调用)示例程序