2019独角兽企业重金招聘Python工程师标准>>>

java分布式实现方式:

  1. CORBA (没接触过,暂且略过)
  2. WebService
  3. RMI远程方法调用

对于WebService,写过接口的人都很熟悉,所以本文重点记录一下RMI。

1.RMI结构图

----图片改编自《JAVA核心技术卷2》

2.示例代码

  1. 首先定义一个接口,RMI接口要继承Remote类,方法要抛出RemoteException异常,此接口client端也要持有,才能调用远程方法。

    import java.rmi.Remote;
    import java.rmi.RemoteException;
    public interface IHelloService extends Remote { public void sayHello() throws RemoteException;
    }
  2. server端接口实现
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject; public class HelloServiceImpl extends UnicastRemoteObject implements IHelloService { @Override public void sayHello() throws RemoteException{ System.out.println("Hello World!");}
    }
  3. 注册服务
    public class TestServer { public static void main(String args[]) { try { IHelloService service = new HelloServiceImpl(); LocateRegistry.createRegistry(1099);Naming.bind("rmi://localhost:1099/HelloService",Service); } catch (Exception e) { e.printStackTrace(); }}
    }
  4. client端调用
    public class TestClient {public static void main(String[] args) {try {String url="rmi://localhost:1099/HelloService"; IHelloService service = (IHelloService)Naming.lookup(url); service.sayHello();} catch (Exception e) {e.printStackTrace();}}
    }

    文件分布情况

server端:

IHelloService.class

HelloServiceImpl.class

TestServer.class

client端:

IHelloService.class

TestClient.class

RMI虚拟机之间传值的两种机制

(1)继承了Remote类的对象作为远程引用传递

(2)实现了Serializable接口的对象使用序列化进行复制

3.题外话

通过上述示例,一个简单的RMI程序就完成了。但是在实际应用中,会涉及到众多服务的分布式部署,就涉及到多台服务的服务注册问题,书中提到”为了安全原因,注册表只允许来自本机的服务注册“,这就要求注册表服务器里需要有所有发布服务的class文件,个人认为这么做反而比较繁琐了。

此处便引出了另一种架构,各个服务在自己的服务器注册表中注册,由一个中间件去记录服务和地址的映射,客户端通过中间件获取服务地址,达到远程调用的目的。至于提供地址映射的中间件可选方式就很多啦,例如 ZooKeeperRedis等等,甚至你可以自己去实现功能去实现服务和地址映射关系的记录。

本文只谈到了RMI的基本应用,对于书中提到动态加载、远程对象激活等内容暂且忽略,有应用需求的话可以深入了解一下。

转载于:https://my.oschina.net/blueSky4Java/blog/704208

Java随笔--分布式相关推荐

  1. java随笔三,真正的class大总结

    java随笔三:class 一.对象与对象引用 class A{} A pa = new A(); 差不多就是A *pa = new A();显然new的是对象,pa是引用(Java毙了指针,把他换个 ...

  2. 计算机科学精彩帖子收集--JAVA和分布式专栏

    之前收集了一个计算机科学精彩帖子收集,渐渐发现帖子越来越大,所以现在干脆把Java和分布式的部分单独一贴. Java jdk下载 http://openjdk.java.net/projects/jd ...

  3. java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: ...

  4. java后端分布式框架路线图

    基于Spring全家桶的java后端分布式框架 框架图 框架图 最近开始在公司实习(摸鱼ing),自己理了一下后端分布式的大体框架,可以如以下简单的示意图所示(抽象派画家O(∩_∩)O...) 首先用 ...

  5. java kafka分布式_Kafka分布式消息系统

    1.简介 Kafka是一个分布式消息系统,使用Scala语言进行编写,具有高水平扩展以及高吞吐量特性. 目前流行的消息队列主要有三种:ActiveMQ.RabbitMQ.Kafka ActiveMQ. ...

  6. java mysql 分布式锁_Java分布式锁之数据库方式实现

    之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...

  7. Java 开源分布式缓存框架Ehcache

    Ehcache 是一个Java实现的开源分布式缓存框架,EhCache 可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取.同时EhCache 扩展非常简单, ...

  8. 手把手教你搭建一个基于Java的分布式爬虫系统

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  9. java实现分布式redis锁_使用redis实现分布式锁

    # 简介: 当高并发访问某个接口的时候,如果这个接口访问的数据库中的资源,并且你的数据库事务级别是可重复读(Repeatable read)的话,确实是没有线程问题的,因为数据库锁的级别就够了:但是如 ...

最新文章

  1. 022_配置configuration
  2. 一、Windows Server 2016 AD服务器搭建
  3. find server/ -type d|xargs -I {} echo mkdir /root/{}
  4. [PHP] 近期接手現有的企邮前端框架业务所遇困难
  5. 中国科学家提出“探索极端宇宙”国际科学计划
  6. java怎么使用floor_Java floor() 方法
  7. 用 GDI 操作 EMF 文件[5]: GetEnhMetaFileDescription - 获取 EMF 文件的说明文本
  8. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  9. repo一个新工程使用步骤
  10. phpyii框架倒叙_快速入门php框架(Lumen thinkphp Yii)
  11. 小甲鱼零基础入门学习python笔记
  12. Flash破解工具-闪客精灵5.4
  13. 个人朋友圈时代过去了,企业微信朋友圈开辟营销新思路
  14. python math库
  15. IP-guard功能模块简介
  16. java获取虎牙直播弹幕消息,虎牙直播弹幕筛选器
  17. 从 ADNI 的 XML 文件中读取临床信息
  18. Day74~75_Flink(一)Flink基础核心知识
  19. 嵌套div里子元素div使用margin可能遇到的问题
  20. 记录洛谷冰雹猜想的实现过程

热门文章

  1. 云视频会议的“多、快、好、省”(下)
  2. POJ-2234 Matches Game---尼姆博奕裸题
  3. 使用c#訪问Access数据库时,提示找不到可安装的 ISAM
  4. 你是否真的了解全局解析锁(GIL)
  5. systemd系统服务管理详解
  6. js中对象的私有属性和公有属性
  7. Amoeba实现mysql主从读写分离
  8. JSTL fmt:formatNumber 数字、货币格式化
  9. ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
  10. vue ts 监听路由改变