RMI是Java原生的分布式服务机制。支持Java对Java的分布式訪问。採用Java的序列化协议进行CodeC操作。

这里简单说下RMI公布服务和client引用服务的方式。

RMI公布服务时支持两种方式。一种是RMI本身的公布协议,第二种是採用通用的JNDI的方式来公布服务。

採用JMI本身的公布协议。能够使用Registry接口,也能够使用Naming工具类。

使用Registry接口时,bind的服务名称仅仅须要直接写服务名称即可。RMI内部会把它变成rmi://ip:port/servicename的方式

public class Server {
public static void main(String[] args){
try {
DemoService service = new DemoServiceImpl("ITer_ZC");
//指定port
Registry registry = LocateRegistry.createRegistry(8888);
 // 注冊服务
registry.bind("demoservice",service);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DemoService is running at Server");
}
}

採用Naming工具类时,须要指定完整的URI方式时的服务名称。

值得注意的是。也须要先绑定port号。否则会报ConnectionRefuse的异常

public class Server {
public static void main(String[] args){
try {
DemoService service = new DemoServiceImpl("ITer_ZC");
 // 指定port
LocateRegistry.createRegistry(8888);
 //完整的URI方式的服务名称
Naming.bind("rmi://10.2.43.50:8888/demoservice",service);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DemoService is running at Server");
}
}

採用JNDI的方式来公布RMI服务。须要指定完整的URI方式的服务名称

public class Server {
public static void main(String[] args){
try {
DemoService service = new DemoServiceImpl("ITer_ZC");
Registry registry = LocateRegistry.createRegistry(8888);
Context nameContext = new InitialContext();
nameContext.rebind("rmi://10.2.43.50:8888/demoservice", service);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DemoService is running at Server");
}
}

client引用RMI服务时,也能够採用两种方式来寻找服务,一种是RMI本身的类,一种是JNDI接口的类。

採用RMI本身的类来引用RMI服务

public class Client {
public static void main(String[] args){
String url = "rmi://10.2.43.50:8888/demoservice";
try {
DemoService service = (DemoService)Naming.lookup(url);
System.out.println(service.sayHi());
} catch (Exception e) {
e.printStackTrace();
} }
}

採用JNDI接口来引用RMI服务

public class Client {
public static void main(String[] args){
String url = "rmi://10.2.43.50:8888/demoservice";
Context nameContext;
try {
nameContext = new InitialContext();
DemoService service = (DemoService)nameContext.lookup(url);
System.out.println(service.sayHi());
} catch (Exception e) {
e.printStackTrace();
}
}
}

转载请注明来源: http://blog.csdn.net/iter_zc

RMI几种公布和引用服务的方式的更多相关文章

  1. Dubbo实践(十五)消费者引用服务

    Refer取得invoker的过程 <!-- 指定了哪种的注册中心,是基于zookeeper协议的,指定了注册中心的地址以及端口号 --> <dubbo:registry proto ...

  2. VS2010 添加服务引用以后点不出引用服务的命名空间

    声明:本次我遇到的仅是这类情况中的其中一个个例,不要拘泥于些噢! 问题描述: 1.我建了一个新项目,不引用服务前是好的,可以打点点出任何已有有命名空间,但是引用服务以后就是点不出服务的命名空间. 2. ...

  3. 怎样基于谷歌地图的Server缓存公布Image Service服务

    怎样基于谷歌地图的Server缓存公布Image Service服务 第一步:下载地图数据 下载安装水经注万能地图下载器,启动时仅仅选择电子.谷歌(这里能够依据自己的须要选择).例如以下图所看到的. ...

  4. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...

  5. dubbo发布和引用服务

    1.首先添加相关的jar包到工程中 2.在spring(mvc)的配置文件中添加约束 xmlns:dubbo=http://code.alibabatech.com/schema/dubbo http ...

  6. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  7. 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  8. 三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较

    目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Repr ...

  9. ArcGIS教程:公布地理处理服务

    要公布地理处理服务.您须要两个元素:结果 窗体中的结果和到 ArcGIS Server 的管理员或公布者连接. 要公布服务,请右键单击结果并选择共享为 > 地理处理服务.例如以下图所看到的.此操 ...

随机推荐

  1. 微信小程序项目实战之豆瓣天气

    概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...

  2. 乱码字符引起的JSON转换失败

        这种问题有两个解决办法,使用后不管你是什么特殊字符还是什么西欧字体还是什么稀奇古怪的内容都可以完美解决!   1.要把即将转换为json的内容先转换为unicode编码,json转换无误后,使 ...

  3. ubuntu 命令行下查看网页 w3m

    w3m localhost/index.php

  4. IntelliJ IDEA类头注释和方法注释

    The template is editable. Along with static text, code and comments, you can also use predefined var ...

  5. 使用TestFlight邀请外部人员測试APP

    怎样使用TestFlight邀请外部人员測试APP 详细过程例如以下: 1.在邀请測试人员的时候.按上线流程打包APP,提交. 2.提交审核,在邀请測试员的时候,你必须先提交审核,苹果会在大约2个工作 ...

  6. 使用Open Live Writer写博客

    1. 下载安装软件 安装包路径http://openlivewriter.org/ 2.配置 打开软件后会提示你配置博客账号地址 3.安装代码高亮插件 下载插件源代码https://pan.baidu ...

  7. 将相关数据拼成所需JSON数据

    参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html 有时候我们需要将一些数据拼装成所需要格式的JSON,可以使用如下方法,本人觉得还是比较方便 ...

  8. mysql date and time type ---- mysql 时间&日期 类型详解

    mysql 中支持用多种方式来表示时间与日期 一.mysql 中能表示时间与日期的数据类型: 1.表示年 ) -- 最好不要用这个数据类型.对于年份的取值中有[1901 --> 2155] + ...

  9. Error-Project facet Java version 1.8 is not supported

    最近导入最新的Strtus2.5.10.1 Demo时出现了这个错误 解决方案如下: 选中工程——右键——Properties 然后依次展开找到如图所示内容,将1.8改成1.7即可. 原因:工程默认配 ...

  10. Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode

    Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 不个网页title保存成个个文件的时候儿有无效字符的问题... 通常两个处理方式 ...