Java随笔--分布式
2019独角兽企业重金招聘Python工程师标准>>>
java分布式实现方式:
- CORBA (没接触过,暂且略过)
- WebService
- RMI远程方法调用
对于WebService,写过接口的人都很熟悉,所以本文重点记录一下RMI。
1.RMI结构图
----图片改编自《JAVA核心技术卷2》
2.示例代码
- 首先定义一个接口,RMI接口要继承Remote类,方法要抛出RemoteException异常,此接口client端也要持有,才能调用远程方法。
import java.rmi.Remote; import java.rmi.RemoteException; public interface IHelloService extends Remote { public void sayHello() throws RemoteException; }
- 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!");} }
- 注册服务
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(); }} }
- 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文件,个人认为这么做反而比较繁琐了。
此处便引出了另一种架构,各个服务在自己的服务器注册表中注册,由一个中间件去记录服务和地址的映射,客户端通过中间件获取服务地址,达到远程调用的目的。至于提供地址映射的中间件可选方式就很多啦,例如 ZooKeeper 、 Redis等等,甚至你可以自己去实现功能去实现服务和地址映射关系的记录。
本文只谈到了RMI的基本应用,对于书中提到动态加载、远程对象激活等内容暂且忽略,有应用需求的话可以深入了解一下。
转载于:https://my.oschina.net/blueSky4Java/blog/704208
Java随笔--分布式相关推荐
- java随笔三,真正的class大总结
java随笔三:class 一.对象与对象引用 class A{} A pa = new A(); 差不多就是A *pa = new A();显然new的是对象,pa是引用(Java毙了指针,把他换个 ...
- 计算机科学精彩帖子收集--JAVA和分布式专栏
之前收集了一个计算机科学精彩帖子收集,渐渐发现帖子越来越大,所以现在干脆把Java和分布式的部分单独一贴. Java jdk下载 http://openjdk.java.net/projects/jd ...
- java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计分布式集群的设备维保系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: ...
- java后端分布式框架路线图
基于Spring全家桶的java后端分布式框架 框架图 框架图 最近开始在公司实习(摸鱼ing),自己理了一下后端分布式的大体框架,可以如以下简单的示意图所示(抽象派画家O(∩_∩)O...) 首先用 ...
- java kafka分布式_Kafka分布式消息系统
1.简介 Kafka是一个分布式消息系统,使用Scala语言进行编写,具有高水平扩展以及高吞吐量特性. 目前流行的消息队列主要有三种:ActiveMQ.RabbitMQ.Kafka ActiveMQ. ...
- java mysql 分布式锁_Java分布式锁之数据库方式实现
之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...
- Java 开源分布式缓存框架Ehcache
Ehcache 是一个Java实现的开源分布式缓存框架,EhCache 可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取.同时EhCache 扩展非常简单, ...
- 手把手教你搭建一个基于Java的分布式爬虫系统
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- java实现分布式redis锁_使用redis实现分布式锁
# 简介: 当高并发访问某个接口的时候,如果这个接口访问的数据库中的资源,并且你的数据库事务级别是可重复读(Repeatable read)的话,确实是没有线程问题的,因为数据库锁的级别就够了:但是如 ...
最新文章
- 022_配置configuration
- 一、Windows Server 2016 AD服务器搭建
- find server/ -type d|xargs -I {} echo mkdir /root/{}
- [PHP] 近期接手現有的企邮前端框架业务所遇困难
- 中国科学家提出“探索极端宇宙”国际科学计划
- java怎么使用floor_Java floor() 方法
- 用 GDI 操作 EMF 文件[5]: GetEnhMetaFileDescription - 获取 EMF 文件的说明文本
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- repo一个新工程使用步骤
- phpyii框架倒叙_快速入门php框架(Lumen thinkphp Yii)
- 小甲鱼零基础入门学习python笔记
- Flash破解工具-闪客精灵5.4
- 个人朋友圈时代过去了,企业微信朋友圈开辟营销新思路
- python math库
- IP-guard功能模块简介
- java获取虎牙直播弹幕消息,虎牙直播弹幕筛选器
- 从 ADNI 的 XML 文件中读取临床信息
- Day74~75_Flink(一)Flink基础核心知识
- 嵌套div里子元素div使用margin可能遇到的问题
- 记录洛谷冰雹猜想的实现过程
热门文章
- 云视频会议的“多、快、好、省”(下)
- POJ-2234 Matches Game---尼姆博奕裸题
- 使用c#訪问Access数据库时,提示找不到可安装的 ISAM
- 你是否真的了解全局解析锁(GIL)
- systemd系统服务管理详解
- js中对象的私有属性和公有属性
- Amoeba实现mysql主从读写分离
- JSTL fmt:formatNumber 数字、货币格式化
- ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
- vue ts 监听路由改变