rmi接口在实际项目中配置说明

一、服务端配置

@Configuration
public class RmiConfiguration implements InitializingBean {

    @Value("${app.rmi.registryPort}")
    private int registryPort;

    @Value("${app.rmi.servicePort}")
    private int servicePort;

    @Resource private IWorkflowEndPoint workflowPoint;

    // 注册rmi服务端,通过该IWorkflowEndPoint接口来访问,在接口中定义方法
    @Bean
    public RmiServiceExporter workflowPointExporter() {
        return export(IWorkflowEndPoint.class, workflowPoint, "flow");
    }

    private RmiServiceExporter export(Class<?> serviceInterface, Object instance, String instanceName) {
        RmiServiceExporter exporter = new RmiServiceExporter();

        exporter.setServiceInterface(serviceInterface);
        exporter.setService(instance);// 接口类
        exporter.setServiceName(instanceName);//服务名称,对应客户端拼接访问路径
        exporter.setRegistryPort(registryPort); //注册端口
        exporter.setServicePort(servicePort); //通讯端口

        return exporter;
    }

    @Override
    public void afterPropertiesSet() {
        log.info("--------------RMI Server started@RegistryPort[{}], ServicePort[{}] ---------------------", registryPort, servicePort);
    }
}

二、对应的客户端配置

@Configuration
public class WorkflowRmiConfiguration {

    @Resource private IRmiHostConfig rmiHostConfig;


   // /flow对应服务端的服务名--》exporter.setServiceName(instanceName);//服务名
    @Bean
    public RmiProxyFactoryBean workflowEndpoint() {
        return InitRmiProxyUtils.init(rmiHostConfig.getWorkflowUrl(), "/flow", IWorkflowEndPoint.class);
    }
}

// 其中InitRmiProxyUtils工具类为:
@UtilityClass
public class InitRmiProxyUtils {

    public static RmiProxyFactoryBean init(String serverUrl, String endpoint, Class<?> endpointInterface) {
        RmiProxyFactoryBean factoryBean = new RmiProxyFactoryBean();
        factoryBean.setRefreshStubOnConnectFailure(true);//连接丢失时尝试重连
        factoryBean.setLookupStubOnStartup(false);//第一次调用时才开始查找生成stub
        factoryBean.setServiceUrl(serverUrl + endpoint);// 访问地址
        factoryBean.setServiceInterface(endpointInterface);// 访问的接口类

        return factoryBean;
    }
}


备注:

以上代码,客户端访问路径:rmi://127.0.0.1:2099/flow,该如何配置

服务端采用的配置类:RmiServiceExporter

客户端采用的配置类:RmiProxyFactoryBean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,Spring支持两个传统的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的暴露远程调用(支持任何Java接口)。 2. Spring的HTTP调用器(Spring’s Http Invoker): Spring提供了一种特殊的允许通过HTTP进行Java串行化的远程调用策略,支持任意Java接口(就像RMI调用器)。相对应的支持类是 HttpInvokerProxyFactoryBean和 HttpInvokerServiceExporter。 3. Hessian: 通过 HessianProxyFactoryBean 和 HessianServiceExporter,可以使用Caucho提供的基于HTTP的轻量级二进制协议来透明地暴露服务。 4. Burlap: Burlap是Caucho的另外一个子项目,可以作为Hessian基于XML的替代方案。Spring提供了诸如 BurlapProxyFactoryBean 和 BurlapServiceExporter 的支持类。 5. JAX RPC: Spring通过JAX-RPC为远程Web服务提供支持(J2EE 1.4's web service API)。 6. JAX-WS:Spring通过JAX-WS为远程Web服务提供支持(the successor of JAX-RPC, as introduced in Java EE 5 and Java 6)。 7. JMS:远程访问通过类JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS的底层协议实现。 二. 远程访问------RMI 1. RMI远程访问基本流程 1). 服务端定义远程访问接口; 2). 服务端通过RmiServiceExporter暴露服务接口 3). 客户端定义与服务端已暴露的相同接口 4). 客户端通过RmiProxyFactoryBean调用服务接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值