首页 > 编程知识 正文

java即时通讯框架(分布式系统如何实现同步)

时间:2023-05-06 07:58:33 阅读:85989 作者:1213

分布式系统之间的通信有以下两种。

基于消息方式的系统间通信的实现基于远程呼叫方式的系统间通信

基于远程调用实现系统间通信

远程呼叫方式是尽可能将系统间的呼叫模拟为系统内的呼叫,使使用者感觉为调用本地接口的方式但是,远程调用并不完全透明。 因为有网络问题、超时问题、串行化/反序列化问题等。

基于远程呼叫实现系统间通信的两种方法

用Java实现远程呼叫的技术主要有RMI和web服务两种。

RMI

在远程媒体集成(RMI )中,客户端只是服务器端提供服务的接口,通过接口实现对远程服务器端的调用。

远程调用基于网络通信进行,RMI也是如此。

RMI服务器端:通过启动RMI注册对象,在一个端口上拦截外部提供的接口。 服务器收到客户端的请求后,分析其中的对象信息等,通过反射获取适当的对象和方法,完成功能的调用。 将结果序列化并通过TCP/IP返回给客户端。 RMI客户端:用poxy代理了对服务器端口的访问。 诸如RMI客户端访问的服务器对象之类的信息封装在一个对象中进行序列化,然后通过TCP/IP传输到服务器端。 最后接收服务器端返回的数据,逆序列化后传递给调用方。

服务器端代码:

RMI要求在服务器端接口上实现远程接口。 接口上的每个方法都必须抛出远程执行。 服务器端业务类通过实现接口提供业务功能,通过调用unicastremoteobject.export object将对象绑定到端口,最后在本地LocateRegistry中注册

//服务器端对外提供的接口

publicinterfacebusinessextendsremote {

公共字符串消息(string message )远程执行;

}

//在服务器端实现此接口的类

publicclassbusinessimplimplementsbuniness {

公共字符串交换(字符串消息) throws远程执行

.

}

}

基于//RMI的服务器端

publicstaticvoidmain (字符串[ ]数组) {

int post=9527;

字符串名称='业务演示';

usiness business=new business impl (;

unicastremoteobject .导出对象(业务,后期);

注册表注册表注册表=locate注册表. create注册表(1099;

注册(名称,商业);

}

客户端代码:

客户端首先从LocateRegistry.getRegistry ()获取Registry对象,然后从Registrylookup字符串获取要调用的服务器端口的实例对象,最后是远程自动

注册表注册表=locate注册表.注册表(localhost );

字符串名称='业务演示';

为BusinessDemo类创建代理类

remoteexceptionbusinessbusiness=(业务)注册. lookup )名称;

网络服务

web服务是语言之间系统之间交互的标准。

服务端:以HTTP格式提供服务。 该服务由WSDL编写,该文件描述了服务使用的协议、所需的参数、返回的参数格式等。 服务端需要将WSDL文件放置在HTTP服务器上,然后使用Java辅助功能通过WSDL文件生成客户端的sub代码。 服务器端接收来自客户端的请求,通过反射调用服务。 客户端:用sub代码将生成的对象请求信息封装到标准SOAP格式的数据中,并将请求发送到服务器端。 客户端和服务端的数据交换格式是SOAP。

服务器端代码:

//服务器端对外提供的接口

publicinterfacebusinessextendsremote {

公共字符串消息(string message )远程执行;

}

//在服务器端实现此接口的类

@ web服务(名称='业务',服务名称='业务服务',目标名称=' http://web服务. chapter1. book

@ soap绑定(样式=soap绑定.样式. RPC ) )。

publicclassbusinessimplimplementsbuniness {

公共字符串交换(字符串消息) throws远程执行

.

}

}

//公开web服务的类

publicstaticvoidmain (字符串[ ]数组) {

endpoint.publish (' http://本地主机:9527 /业务服务',新业务impl );

system.out.println (服务器已注册);

}

客户端代码:

客户端使用JDK bin目录下的wsimport命令生成服务调用代码。 通过执行以下命令生成辅助代码:

w导入- keep http://本地主机:9527 /业务服务? wsdl

执行后,将在文件夹book/chapter/WebService/client下生成Business.java和BusinessService.java的代码,并基于这些代码创建客户端代码

业务服务业务=新建业务服务(

business business=business service.getbusinessport (;

商业.电子商务(命令);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。