最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java基于RMI遠程過程調用詳解

 更新時間:2022年08月12日 12:02:29   作者:陳虎_63  
這篇文章主要為大家詳細介紹了java基于RMI遠程過程調用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

Java RMI,即遠程方法調用(Remote Method Invocation),一種用于實現遠程過程調用(RPCRemote procedure call)的Java API, 能直接傳輸序列化后的Java對象。它的實現依賴于Java虛擬機,因 此它僅支持從一個JVM到另一個JVM的調用。

1、服務端生成一個注冊表,并綁定一個端口
2、服務端將需要發(fā)布的服務接口,注冊到注冊表中
3、啟動服務等待消費者
4、消費者根據服務端的IP和端口獲取注冊表
5、消費者從注冊表中根據名稱獲取想要提供服務的service接口
6、消費者調用接口中的方法完成方法的調用

環(huán)境搭建

創(chuàng)建一個工程模塊

創(chuàng)建pojo類:

package cn.hu.rmi.pojo;

import java.io.Serializable;

/**
?* @Author: hu.chen
?* @Description: 因為需要序列化和反序列化,所以需要實現Serializable接口
?* @DateTime: 2021/12/26 5:05 PM
?**/
public class User implements Serializable {
? ? private Integer id;

? ? private String name;

? ? public Integer getId() {
? ? ? ? return id;
? ? }

? ? public void setId(Integer id) {
? ? ? ? this.id = id;
? ? }

? ? public String getName() {
? ? ? ? return name;
? ? }

? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }

? ? @Override
? ? public String toString() {
? ? ? ? return "User{" +
? ? ? ? ? ? ? ? "id=" + id +
? ? ? ? ? ? ? ? ", name='" + name + '\'' +
? ? ? ? ? ? ? ? '}';
? ? }
}

創(chuàng)建user接口:

package cn.hu.rmi.service;

import cn.hu.rmi.pojo.User;

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

/**
?* @Author: hu.chen
?* @Description: 需要提供服務的接口需要繼承 Remote 并且所有的方法都需要拋出 RemoteException 異常
?* @DateTime: 2021/12/26 5:06 PM
?**/
public interface UserService extends Remote {


? ? /**
? ? ?* 所有的方法都需要拋出 RemoteException 異常
? ? ?* @param id
? ? ?* @return
? ? ?* @throws RemoteException
? ? ?*/
? ? User getUserById(Integer id) throws RemoteException;
}

服務提供者:

創(chuàng)建userservice的實現類

package cn.hu.rmi.service.impl;

import cn.hu.rmi.pojo.User;
import cn.hu.rmi.service.UserService;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
?* @Author: hu.chen
?* @Description: 所有的實現類都需要繼承 UnicastRemoteObject 這個類
?* @DateTime: 2021/12/26 5:07 PM
?**/
public class UserServiceImpl extends UnicastRemoteObject implements UserService {

? ? private static Map<Integer,User> userMap=new ConcurrentHashMap<>(8);

? ? static {
? ? ? ? User user1=new User();
? ? ? ? user1.setId(1);
? ? ? ? user1.setName("張三");
? ? ? ? User user2=new User();
? ? ? ? user2.setId(2);
? ? ? ? user2.setName("李四");
? ? ? ? userMap.put(user1.getId(),user1);
? ? ? ? userMap.put(user2.getId(),user2);
? ? }

? ? public UserServiceImpl() throws RemoteException {
? ? ? ? super();
? ? }


? ? @Override
? ? public User getUserById(Integer id) throws RemoteException ?{
? ? ? ? return userMap.get(id);
? ? }
}

啟動并將實現類添加到注冊表中:

package cn.hu.rmi.server;

import cn.hu.rmi.service.UserService;
import cn.hu.rmi.service.impl.UserServiceImpl;

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

/**
?* @Author: hu.chen
?* @Description: 服務端(服務提供者)
?* @DateTime: 2021/12/26 5:11 PM
?**/
public class RmiServer {


? ? public static void main(String[] args) throws RemoteException {

? ? ? ? // 1: 創(chuàng)建注冊表對象,之后服務提供者暴露的服務都需要注冊到這個注冊表中
? ? ? ? Registry registry = LocateRegistry.createRegistry(8089);

? ? ? ? UserService userService=new UserServiceImpl();

? ? ? ? // 將需要提供的service服務注冊到注冊表中
? ? ? ? registry.rebind("userService",userService);


? ? ? ? System.err.println("服務提供者啟動成功");


? ? }
}

服務消費者:

package cn.hu.rmi.client;

import cn.hu.rmi.pojo.User;
import cn.hu.rmi.service.UserService;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
?* @Author: hu.chen
?* @Description: 客戶端(服務消費者)
?* @DateTime: 2021/12/26 5:18 PM
?**/
public class RmiClient {
? ? public static void main(String[] args) throws RemoteException, NotBoundException {

? ? ? ? //1: 獲取遠程的注冊表
? ? ? ? Registry registry = LocateRegistry.getRegistry("127.0.0.1", 8089);

? ? ? ? UserService userService= (UserService) registry.lookup("userService");

? ? ? ? User userById = userService.getUserById(1);

? ? ? ? System.err.println(userById);
? ? }
}

啟動服務提供者,然后啟動服務消費者:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java實現一個簡易版的多級菜單功能

    Java實現一個簡易版的多級菜單功能

    這篇文章主要給大家介紹了關于Java如何實現一個簡易版的多級菜單功能的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • Java實現字符串反轉的常用方法小結

    Java實現字符串反轉的常用方法小結

    在Java中,你可以使用多種方法來反轉字符串,這篇文章主要為大家整理了幾種常見的反轉字符串的方法,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • java  異常詳解及應用實例

    java 異常詳解及應用實例

    這篇文章主要介紹了java 異常詳解及應用實例的相關資料,需要的朋友可以參考下
    2017-01-01
  • Java 反射之私有字段和方法詳細介紹

    Java 反射之私有字段和方法詳細介紹

    本文將介紹Java 反射之私有字段和方法的應用,需呀了解的朋友可以參考下
    2012-11-11
  • java單例模式實現面板切換

    java單例模式實現面板切換

    這篇文章主要為大家詳細介紹了java單例模式實現面板切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 解決mybatis一對多查詢resultMap只返回了一條記錄問題

    解決mybatis一對多查詢resultMap只返回了一條記錄問題

    小編接到領導一個任務需求,需要用到使用resultMap相關知識,在這小編記錄下這個問題的解決方法,對mybatis一對多查詢resultMap項目知識感興趣的朋友一起看看吧
    2021-11-11
  • Java實現排球比賽計分系統(tǒng)

    Java實現排球比賽計分系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現排球比賽計分系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 5分鐘搞定java單例模式

    5分鐘搞定java單例模式

    單例模式(Singleton?Pattern)是?Java?中最簡單的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,本文給大家介紹下java單例模式的相關知識,感興趣的朋友一起看看吧
    2022-03-03
  • Spring Boot的Profile配置詳解

    Spring Boot的Profile配置詳解

    本篇文章主要介紹了Spring Boot的Profile配置詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

富平县| 左权县| 泸水县| 德安县| 汝阳县| 山西省| 尚志市| 隆安县| 德令哈市| 嘉兴市| 博客| 衢州市| 清远市| 白河县| 林州市| 安丘市| 商洛市| 尼玛县| 高阳县| 敦化市| 龙南县| 海伦市| 宜兰市| 英吉沙县| 县级市| 楚雄市| 朝阳区| 扬中市| 怀来县| 安塞县| 湘潭县| 台南市| 北碚区| 通道| 三台县| 通许县| 千阳县| 镇雄县| 鹰潭市| 大关县| 灵丘县|