ego电商项目:Rmi远程服务发布

2 篇文章 0 订阅

一、创建Maven Project

1.rmi-rescource 提供远程服务对象接口
2.rmi-provider 提供远程项目
3.rmi-customer 消费远程项目

二、代码实现

1.rmi-resource

package com.facai.service;

import java.rmi.Remote;
import java.rmi.RemoteException;

/*
 * 创建需要发布的服务对应的业务接口
 * Remote接口用于标识可以从非本地虚拟机调用的接口
 */
public interface UserService extends Remote{
	
	public String helloRmi(String name) throws RemoteException;
}

2.rmi-provider
提供远程服务的对象UserServiceImpl

package com.facai.service.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import com.facai.service.UserService;
/*
 * 发布的服务对应的实现类
 */
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;
	}

}

启动类

package com.facai.app;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import com.facai.service.UserService;
import com.facai.service.impl.UserServiceImpl;

public class ProviderApp {
	public static void main(String[] args) {
		/*
		 * 完成远程服务的发布
		 * 将远程服务发布在本地的8888端口
		 */
		try {
			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 e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

3.remi-customer

package com.facai.app;

import java.rmi.Naming;
import java.rmi.Remote;

import com.facai.service.UserService;


public class CustomerApp {
	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){
			e.getStackTrace();
		}
	}
	
}

注:rmi-provider和rmi-customer要对rmi-resource添加依赖
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
**

三、使用到的API

**
Remote接口:标识某个方法可以被远程调用|
UnicastRemoteObject类:实现Remote远程对象的导出
Naming:给提供远程服务的对象绑定url
通过远程的url,获得提供远程服务的代理对象
LocalRegistry类:指定发布远程服务的方法接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值