【RPC】远程接口调用实例

实例之前可以先了解一个东西--HttpInvoker。HTTPInvoker使用原理

Spring HTTP Invoker:使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即调用者与被调用者都必须是使用Spring框架的应用。

服务器端:

基于现在的多模块项目开发,我新建了一个client模块,这个模块专门为客户端提供rpc的远程调用接口。

【RPC】远程接口调用实例_第1张图片

/**
 * @description 获取所有目录的远程rpc接口
 * @author: gaobh
 * @date: 2018/4/12 9:33
 * @version: v1.0
 */
public interface GetAllMenuRPC {
    /**
     * 获取目录list
     * @return
     */
    void getAllMenu();
}

/**
 * @description
 * @author: lalal
 * @date: 2018/4/12 9:38
 * @version: v1.0
 */
@Component
public class GetAllMenuRPCImpl implements GetAllMenuRPC {

    /**
     * 获取目录list
     *
     * @return
     */
    @Override
    public void getAllMenu() {
        System.out..printf("我是目录我是目录");
    }
}
上面这个是一个很常见的接口和其实现类,现在要通过一系列的配置,将这个接口对外开放,让客户端能够调到这个rpc接口,下面就是相关配置。

配置:

    1、服务声明:

        在Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共三部分:

    服务名称、服务类型、服务实现类



    
    

    2、服务URL关联:

        在web.xml中声明一个与服务名称相同的Servlet(当然这个Servlet类的Spring已经提供即HttpRequestHandlerServlet,这家伙的作用就是直接把请求扔给同名的bean),然后声明servlet-mapping将其map到指定URL,这样客户就可以通过这个URL访问到对应的服务。


    menuExporter
    org.springframework.web.context.support.HttpRequestHandlerServlet
  
  
    menuExporter
    /remoting/getAllMenuRPC
  
客户端: (这里我并没有在另一个java项目进行配置调用,而是在本地写了一个测试类,进行调用,wishing是一样的配置)

    在spring bean配置文件中创建一个类HttpInvokerProxyFactoryBean的bean,指定serviceUrl属性为服务器端的服务提供的URL,serviceInterface属性为服务器配置的服务类型。

/**
 * @description 远程调用测试类
 * @author: lalla
 * @date: 2018/4/12 9:57
 * @version: v1.0
 */
public class RPCTest {
    @Resource
    private GetAllMenuRPC getAllMenuRPC;
    public static void main(String[] args){
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
        ctx.load("classpath:rpc-consumer.xml");
        ctx.refresh();
        GetAllMenuRPC getAllMenuRPC = ctx.getBean("remoteMenuService",GetAllMenuRPC.class);
        getAllMenuRPC.getAllMenu();
        System.out.println(888);
    }
}
配置:

    
    

看一下我的文件位置:

【RPC】远程接口调用实例_第2张图片

全部搞定后,将服务器先跑起来,然后运行客户端程序就可以看到调用结果了。

这里我用的是本服务器的测试类进行测试,在开发的过程中很建议采取这种方式进行测试和代码调试,本地成功后,在启动真正的客户端进行调试会节省很多时间。这里需要注意一下,客户端项目若想远程调用服务器端的代码,在客户端上面还需要引入服务器端的client jar包。

本文参考文章:Spring HTTP Invoker使用介绍

你可能感兴趣的:(RPC)