`
daodan988
  • 浏览: 31583 次
  • 性别: 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远程接口调用成功

 

分享到:
评论

相关推荐

    基于某SpringCloud微服务系统设计方案设计.docx

    【基于某SpringCloud微服务系统设计方案】 微服务架构是一种分布式系统设计模式,它提倡将单一应用程序分解为一组小的服务,每个服务都在独立的进程中运行,使用轻量级通信机制(如HTTP RESTful API)。这种架构...

    基于SpringCloud-微服务系统设计方案.doc

    【基于SpringCloud的微服务系统设计方案】 微服务架构是一种现代软件开发的方法,它提倡将单一应用程序分解为一组小的服务,每个服务都运行在独立的进程中,通过轻量级的通信机制,如HTTP RESTful API进行交互。...

    Spring Cloud 学习笔记.pdf

    Spring Cloud是一套微服务架构下的分布式系统解决方案,提供了在分布式系统环境下快速构建一些常见模式的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...

    尚硅谷SpringCloud视频 + 源码 百度网盘

    Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用、智能容错和恢复机制、以及服务自动注册和发现。 #### 2.2 比较分析 - **服务治理**:Dubbo提供了更完善的服务治理...

    基于SpringCloud-微服务系统设计方案.docx

    《基于SpringCloud的微服务系统设计方案》 微服务架构,作为一种新型的软件开发模式,它强调将单一应用程序拆分为一组小的服务,每个服务都运行在独立的进程中,并且使用轻量级通信机制,如HTTP RESTful API。这种...

    spring cloud 中文文档

    - **传播安全上下文或使用Spring范围**:解释了如何确保在调用远程服务时正确传播安全上下文。 - **Hystrix指标流**:介绍了如何利用Hystrix提供的指标流功能来监控服务调用的性能。 - **Hystrix仪表板**:描述了...

    SpringCloud组件详细介绍word文档

    Hystrix 是一个延迟和容错库,主要用于隔离远程系统、服务和第三方库的访问点,防止级联故障并在复杂分布式系统中实现弹性。它通过断路器模式、线程池隔离或信号量隔离等技术来实现这些功能。 - **特点**: - **...

    基于SpringCloud 微服务系统设计方案.docx

    【基于SpringCloud的微服务系统设计方案】 微服务架构是一种分布式系统设计风格,它提倡将单一应用程序分解为一组小的服务,每个服务独立运行在自己的进程中,通过轻量级通信机制(如HTTP API)相互通信。这种架构...

    SpringCloud配置大全.pdf

    配置中心组件中,SpringCloud Config分为Server和Client两部分,Server负责配置文件的存储及以接口形式提供配置内容,而Client则通过接口获取配置信息。Apollo则是一个功能强大的配置中心,它支持统一界面管理不同...

    springboot+quartz集群:通过动态配置调度dubbo接口/http接口代码实现

    在项目中,我们可以通过Quartz来调度Dubbo接口,使得定时任务能够调用远程服务。HTTP Job则是通过HTTP请求来执行任务,这种方式更加灵活,可以调用任何暴露HTTP接口的服务。 要实现动态配置,我们需要一个用户界面...

    SpringCloud简介及应用实例及实例分析.txt

    Spring Cloud 是一套用于构建分布式系统的微服务开发工具包,它提供了微服务架构下的服务注册与发现、配置管理、API网关、智能路由、负载均衡、断路器、数据监控等一整套解决方案。Spring Cloud 的出现使得开发者...

    深入理解Spring Cloud与微服务构建 方志朋 高清pdf

    Hystrix是一个延迟和容错库,旨在通过添加延迟容忍和容错逻辑来隔离远程系统、服务和第三方库的访问点,从而阻止级联故障并提供回退选项。 5. **Zuul**:API网关。Zuul提供了动态路由、监控、弹性和安全性的核心特性...

    SpringCloud相关面试题.pdf

    - **方法**:Hystrix 是一个延迟和容错库,旨在隔离远程系统、服务和第三方库的访问点,当这些点发生故障时停止雪崩。通过在代码中创建 HystrixCommand 或 HystrixObservableCommand 实例,可以定义断路器的行为,...

    SpringCloud微服务笔记

    - 特征:所有业务逻辑、数据访问及用户交互都在同一个应用程序内实现。 - 适用场景:适用于小型项目或初期开发阶段。 - 优缺点:易于管理和调试,但难以扩展,不适用于大规模团队协作。 2. **传统项目架构**: ...

    2020.9最新-Spring Cloud视频教程.txt

    - Hystrix 是一个延迟和容错库,旨在隔离远程系统、服务和第三方库的访问点,当这些点出现故障时停止它们级联失败。 - 它通过快速失败、资源隔离、超时和重试等策略来提高系统的稳定性和响应性。 - 断路器模式...

    2020.9最新-SpringCloud视频.txt

    Spring Cloud Config 为微服务架构中的微服务提供了一种中心化的外部配置支持,允许将配置放到远程服务器,集中化管理集群配置。分为服务端和客户端两部分,服务端也称为分布式配置中心,它是一个独立的微服务应用,...

    SpringCloud示例代码

    Spring Boot 实现的云应用开发工具集,它为开发人员提供了在分布式系统(如配置管理、服务发现、断路器、负载均衡、熔断机制、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话以及集群状态等...

    springcloud-parent.zip

    SpringCloud是基于SpringBoot实现的一套微服务解决方案,它包含了众多子项目,用于解决在微服务架构中常见的配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、...

    spring开发指南文档.rar

    9. **Spring Integration**:为Spring应用程序提供企业级集成功能,如消息传递、文件处理和远程调用等。 10. **Spring Cloud**:一套微服务开发工具集,为分布式系统提供服务发现、配置中心、断路器、智能路由、...

Global site tag (gtag.js) - Google Analytics