`
daodan988
  • 浏览: 30612 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring 远程接口访问及集群方案(二)

阅读更多

针对spring远程接口访问,本文给出一个实际的例子供参考,如果有不足之处,尚请原谅

 

RMI调用的过程,我的理解大致如下:

1   客户端和服务器端约定好要用于远程调用的方法的接口(包括方法名和输入输出参数)

2      服务器端将远程服务绑定到某个端口,进行TCP/IP监听(例如监听地址为rmi://127.0.0.1:1099)

3      客户端与服务器建立TCP/IP连接(当然事先要知道服务器端的监听地址),按照接口声明的方法发送数据(可序列化的Java对象)以及要调用的服务名、方法名等。

4      服务器端将接收到的数据(字节流)反序列化,得到要调用的方法和参数信息;然后服务器端进行本地计算(方法调用)

6      服务器端将计算的结果(可序列化的Java对象)发送给客户端。

7      客户端从接收到的返回数据(字节流)中进行反序列化,得到运算结果。

8      客户端断开与服务器端的TCP/IP连接,远程调用结束。

 

服务端开发

 

1.声明要发布为rmi服务的接口

 package demo.rmi.server;

 public interface IHelloWorld{

public void print(String message);

 }

2.实现要发布为RMI服务的接口

package demo.rmi.server;

 

public class HelloWorldImpl implements IHelloWorld {

     public void print (String message) {

                  Sysetm.out.println(message)

       }

    }

}

 首先在Spring配置文件中(这里我命名为server.xml),配置所需要的Bean

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

    <bean id="helloWorldService" class="demo.rmi.server.HelloWorldImpl" />

     <!-- define a RMI service listening at port 1009 -->

    <bean id="serviceExportert" class="org.springframework.remoting.rmi.RmiServiceExporter">

        <property name="service"><ref bean=" helloWorldService " /></property>

        <property name="serviceName"><value> helloWorldService </value></property>

        <property name="serviceInterface"><value>demo.rmi.server. IHelloWorld </value></property>

        <!-- defaults to 1099 -->  <property name="registryPort" value="1001" />

    </bean>

</beans>

 

然后启动我们的RMI服务,进行绑定和监听

  package demo.rmi.server;

 

import java.rmi.RemoteException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.remoting.rmi.RmiServiceExporter;

  

public class RMIServer {

 

    public void startByAPI() {

       RmiServiceExporter exporter = new RmiServiceExporter();

       try {

           exporter.setServiceInterface(IHelloWorld.class);

           exporter.setServiceName("serviceByAPI");

            exporter.setService(new HelloWorldImpl());

           exporter.setRegistryPort(1009);

            exporter.afterPropertiesSet();

       } catch (RemoteException e) {

           System.out.println("error when export service", e);

       }

    } 

  

当我们初始化SpringApplicationContext后,Spring会自动完成RMI服务的绑定和监听。

 

客户端开发

首先在Spring配置文件中(这里我命名为client.xml),配置所需要的Bean

<?xml version="1.0" encoding="UTF-8"?>

<beans>

    <!-- define a RMI client service which send to port 1001 -->

<bean id="helloWorldServiceProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">

        <property name="serviceUrl">

            <value>rmi://127.0.0.1:1001/helloWorldService</value>

        </property>

        <property name="serviceInterface">

            <value>demo.rmi.server.IPresence</value>

        </property>

    </bean>

</beans>

然后我们可以编写客户端进行RMI调用的代码。

package demo.rmi.client;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import demo.rmi.server.IPresence;

 

public class RMIClient {

         public static void main(String[] args) {

                   ApplicationContext context = new ClassPathXmlApplicationContext(

                                     "client.xml");

                            System.out.println("RMI client initialized successfully!");

 

                   // test get a RMI client service via Spring API at runtime

                   // RmiProxyFactoryBean factory = new RmiProxyFactoryBean();

                   // factory.setServiceInterface(IHelloWorld.class);

                   // factory.setServiceUrl("rmi://127.0.0.1:1009/helloWorldService");

                   // factory.afterPropertiesSet();

                   //

                   // IPresence service2 = (IHelloWorld) factory.getObject();

        

                   IPresence service = (IPresence) context

                                     .getBean("helloWorldServiceProxy ");

                   StringBuilder presentitiesInfo = new StringBuilder();

                   Service.print(“hello world!”);

         }

 

}

如果在服务端显示"hello world"提示,则表示spring rmi远程接口调用成功

 

分享到:
评论

相关推荐

    46道Dubbo面试题含详细的答案说明(很全)

    Dubbo是一个高性能、轻量级的开源Java RPC框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 Dubbo提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成

    模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成.zip

    模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装...

    JeeSpringCloud后台权限管理系统-其他

    模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    JAVA上百实例源码以及开源项目

     各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP  基于JAVA的UDP服务器模型源代码...

    JAVA上百实例源码以及开源项目源代码

     各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP  基于JAVA的UDP服务器模型源代码...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包7

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包9

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包101

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    Java资源包01

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

Global site tag (gtag.js) - Google Analytics