rmi远程调用被拒绝_使用 RMI 实现方法的远程调用

287ff9d828c52422290175aa3cfcf4bc.png

RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java

虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象

必须实现该远程接口。

3.1 创建 rmi-provider 项目

3.2 创建 UserService 接口

package com.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
/***
* 创建需要发布的服务对应的业务接口
* @author Administrator
* Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。
*/
public interface UserService extends Remote{
public String helloRmi(String name) throws RemoteException; }

3.3 创建 UserServiceImpl 实现类

package com.service.impl;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.bjsxt.service.UserService;
/***
* 创建发布的服务对应的实现类
* @author Administrator
*
*/
public class UserServiceImpl
extends UnicastRemoteObject implements UserService {
public UserServiceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
@Override
public String helloRmi(String name) throws RemoteException {
// TODO Auto-generated method stub
return "hello "+name; } }

3.4 发布远程服务

package com.app;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;
public class ProviderApp {
public static void main(String[] args) {
try{
/****
* 完成远程服务的发布
*/
//将远程服务发布在本地的 8888 端口
LocateRegistry.createRegistry(8888);
//发布的远程服务的访问 url
String name="rmi://localhost:8888/rmi";
//创建一个提供具体服务的远程对象
UserService userService = new UserServiceImpl();
//给提供远程服务的对象绑定一个 url
Naming.bind(name, userService);
System.out.println("=============发布 rmi 远程服务============");
}catch(Exception ex){
ex.printStackTrace();
} } }

4 服务消费者实现

4.1 创建 rmi-consumer 项目

4.2 拷贝 UserService 接口

package com.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
/***
* 创建需要发布的服务对应的业务接口
* @author Administrator
* Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。
*/
public interface UserService extends Remote{
public String helloRmi(String name) throws RemoteException;
}

4.3 消费远程服务

package com.app;
import java.rmi.Naming;
import com.bjsxt.service.UserService;
public class ConsumerApp {
public static void main(String[] args) {
try{
//发布的远程服务的访问 url
String name="rmi://localhost:8888/rmi";
//通过发布的远程服务的 url,获得远程服务的代理对象
UserService userService = (UserService) Naming.lookup(name);
System.out.println("获得的远程服务的代理对象:"
+userService.getClass().getName());
//通过远程服务的代理对象调用远程服务方法
String result = userService.helloRmi("rmi");
System.out.println("result="+result);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} } }

5RMI 相关 API 总结

e9b8b1606fc67c6e8450a143023ba99d.png

6 代码结构重构

6.1 建立 rmi-resource 公共资源项目

6.2 拷贝 UserService 接口

6.3 删除 rmi-provider 中 UserService 接口

6.4 删除 rmi-consumer 中 UserService 接口

6.5rmi-provider 添加依赖

6.6rmi-consumer 添加依赖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值