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

RMI发布多个服务(接口)

阅读更多

在使用Spring RMI时可能会遇到发布多个服务的需求,假设一个服务要操作文件,另一个服务要往屏幕上打印“hello world”。难道要把这两个风马牛不相及的服务写在一个接口里吗!如果真这样那结构也太差了。

网上有人问这个问题:“http://topic.csdn.net/u/20090702/11/9bcf60e5-f3f8-4401-a41d-2f98535988b9.html”,看样子这个问题难住了一些人,因为他们想在一个serviceName里面发布多个serviceInterface。其实转换个思维也就不会被难倒了。倘若在一个serviceName里面发布多个serviceInterface,那么service又该怎么配呢,难道用个list将serviceInterface和service对应起来?显然是行不通的。

解决办法很简单:配置多个RmiServiceExporter的bean,使不同的服务(属性:service)用不同的服务名(属性:serviceName)和接口(属性:serviceInterface)。给个demo就更清晰了:

 1:  <bean id="oper1" class="***.Oper1"></bean>
 2:  <bean id="rmiService_oper1" class="org.springframework.remoting.rmi.RmiServiceExporter">
 3:      <property name="serviceName">
 4:          <value>oper1</value>        
 5:      </property>
 6:      <property name="service">
 7:          <ref local="oper1" />
 8:      </property>
 9:      <property name="serviceInterface">
10:          <value>***.IOper1</value>
11:      </property>
12:      <property name="registryPort">
13:          <value>9990</value>        
14:      </property>
15:  </bean>
16:  
17:  <bean id="oper2" class="***.Oper2"></bean>
18:  <bean id="rmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
19:      <property name="serviceName">
20:          <value>oper2</value>        
21:      </property>
22:      <property name="service">
23:          <ref local="oper2" />
24:      </property>
25:      <property name="serviceInterface">
26:          <value>***.IOper2</value>
27:      </property>
28:      <property name="registryPort">
29:          <value>9990</value>        
30:      </property>
31:  </bean>

service、serviceName和serviceInterface都不一样,端口可以相同。

客户端的配置也很简单了:

 1:  <bean id="rmiClient_oper1" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
 2:      <property name="serviceUrl">
 3:          <value>rmi://192.168.0.***:9990/oper1</value>
 4:      </property>
 5:      <property name="serviceInterface">
 6:          <value>***.IOper1</value>
 7:      </property>
 8:  </bean>
 9:  <bean id="rmiClient_oper2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
10:      <property name="serviceUrl">
11:          <value>rmi://192.168.0.***:9990/oper2</value>
12:      </property>
13:      <property name="serviceInterface">
14:          <value>***.IOper2</value>
15:      </property>
16:  </bean>

main里运行:

1:  public static void main(String[] args) {
2:      ApplicationContext ctx = new ClassPathXmlApplicationContext(
3:              "applicationContext-client.xml");
4:      IOper1 o1 = (IOper1) ctx.getBean("rmiClient_oper1");
5:      o1.exeuteFile();
6:   
7:      IOper2 o2 = (IOper2) ctx.getBean("rmiClient_oper2");
8:      o2.printHelloWorld();
9:  }

这主要是个思路问题,没什么巧的。

分享到:
评论

相关推荐

    RMI SpringRMI API

    9. **并行计算**:RMI使得在多个处理器或计算机上并行执行任务成为可能。 创建RMI接口的步骤如下: 1. **定义接口**:创建一个接口,并让它继承`java.rmi.Remote`。接口中定义的每个方法都需要抛出`java.rmi....

    rmi.rar_RMI java

    在分布式环境中,利用RMI计算斐波那契数列可以展示如何在多个节点间分配任务,提高计算效率。 RMI的工作原理包括以下步骤: 1. **定义远程接口**:首先,你需要定义一个Java接口,该接口声明了将在远程对象上调用...

    rmi.rar_Java CORBA_corba_rmi

    总的来说,Java RMI和CORBA是两种强大的分布式计算工具,它们允许开发者构建跨越多个计算机的复杂系统。理解它们的工作原理和使用方式对于提升Java程序员在分布式环境下的编程能力至关重要。通过学习这些技术,...

    JDK5新版RMI编程指南

    在JDK5之前,使用RMI是一项相对复杂的工作,涉及到多个步骤,包括定义远程接口、编写服务端和客户端代码、生成Stub和Skeleton等。这些繁琐的操作使得许多开发者转而寻求其他解决方案,如使用EJB作为一种对RMI的封装...

    系统接口设计对接方案 .docx

    本文将从系统接口设计的多个方面进行讲解,包括系统接口标准、交换标准、Web 服务标准、业务流程标准、数据交换安全、数据交换标准等。 系统接口标准是指系统对接方式的核心标准,本文采用 SOA 体系架构,通过服务...

    编程语言JavaRMI入门教程.pdf

    文档的最后部分提到了一些特定的商标信息,这些商标受到美国政府的FAR和DFAR条款的限制,同时也在美国和其他国家注册,如UNIX、Sun Microsystems的标志以及Java相关的多个商标。这些条款和声明主要是为了说明文档和...

    RMI_Alchemy_Processors_AutoBoot_Boot_Loader_User's_Guide

    源代码包提供了一个菜单驱动的配置接口,允许用户进行默认构建配置。 ### 3.2 构建过程 1. **下载源代码**:从指定的网站下载AutoBoot的源代码包。 2. **配置构建环境**: - 确保安装了适当的工具链,例如用于...

    EJB 基于Java的远程方法调用(RMI)技术

    | 返回值 | 单个对象或集合 | 单个或多个对象 | | 声明位置 | Home接口 | Bean类 | | 方法名 | FindXxx() | EjbSelectXxx() | | 可见度 | 客户端可见 | Bean类内部可见 | #### 七、主接口与组件接口的区别 - **主...

    dubbo的服务发布与服务引用

    总结,Dubbo的服务发布与服务引用涉及配置解析、服务暴露、注册中心交互、服务发现、负载均衡以及远程调用等多个环节。通过对源码的深入分析,我们可以更清晰地了解这些流程,从而更好地理解和优化Dubbo的应用。

    论文研究-JMS与RMI技术在数据库监测系统中应用研究.pdf

    在系统设计时,将数据库监测系统分为多个子系统,包括中间层服务器程序、浏览器、HTTP/HTTPS请求响应处理、Web容器、业务逻辑层、JDBC访问Bean等。这些子系统通过消息发布/订阅或者远程方法调用来实现通信和数据交换...

    Introduction to Java Distributed Objects - Using RMI and CORBA.pdf

    随着公司规模的不断扩大,他们面临着越来越多的管理挑战,尤其是在多个办公室之间协调工作时。为了提高效率并解决这些问题,他们决定采用分布式计算技术。 ### 分布式解决方案 #### 分布式办公环境的问题 随着...

    WebService接口开发与调用

    - 需要注意的是,如果在同一台机器上有多个Tomcat实例,则需要配置不同的端口号来避免冲突。 ##### 4. 添加依赖 - 这是创建WebService接口的重要一步。 - 添加必要的WebService库,例如Apache CXF或Spring Web...

    Dubbo分布式服务框架入门1

    - **集群(Cluster)**:对多个服务提供者的实例进行管理和负载均衡,隐藏服务列表的细节。 - **路由(Router)**:根据一定的规则筛选服务提供者,实现动态路由策略。 四、配置与实践 Dubbo的使用通常涉及到以下...

    简单dubbo框架使用

    4. **Cluster层:** 负责多个服务提供者的负载均衡和容错处理,如Failover、Failfast、Failsafe、Fallback等策略。 5. **Registry层:** 处理服务的注册和订阅,维护服务提供者和消费者之间的关系。 6. **Protocol层...

    Dubbo第一个例子

    7. **负载均衡(Load Balancing)**:如果服务提供者有多个实例,Dubbo提供了多种负载均衡策略,如随机、轮询、最少活跃调用数等,用于在多个实例间分配请求,提高系统可用性。 8. **容错机制(Fault Tolerance)**...

    传统springmvc工程进行服务拆分以及dubbo化

    1. **服务拆分**:服务拆分的目标是将大而全的单体应用分解为多个小而美的服务,每个服务专注于特定的业务领域。在描述中提到的拆分方式包括Web、Service、Facade、Parent和Common等工程服务。这代表了以下几种常见...

    分布式学习文档,帮助你初步学习 Java的分布式编程

    RMI简化了多台计算机间的通信,使得开发者无需深入理解底层网络细节就能实现跨机器的对象交互。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:所有可以被远程调用的对象都必须实现`java.rmi.Remote`...

    dubbodubbo.zip

    4. **微服务架构**:在微服务架构中,Dubbo可以帮助拆分大型系统为多个小型、独立的服务,每个服务都可以独立部署、扩展,降低了系统的复杂性。 5. **集成Spring Boot**:Dubbo可以无缝集成Spring Boot,利用Spring...

Global site tag (gtag.js) - Google Analytics