• java RPC系列之二 HTTPINVOKER


    java RPC系列之二  HTTPINVOKER

    一、java RPC简单的汇总

      java的RPC得到技术,基本包含以下几个,分别是:RMI(远程方法调用) 、Caucho的Hessian 和 Burlap 、Spring的基于HTTP的远程服务、以及使用JAX-RPC和JAX-WS的Web服务。本文主要介绍spring的httpinvoker的基本的配置实现。

    二、Springhttpinvoker的配置实现

    基本步骤:

          1.定义好服务端需要提供的接口方法(客户端调用的接口);

          2.定义好服务端的实现代码;

          3.使用spring配置服务端,发布服务到制定端口;

          4.使用spring配置客户端的代理bean;

          5.定义好服务端和客户端调用的测试代码。

    三、Springhttpinvoker的配置实现的代码如下:

       1.定义好ISayHello接口类,服务端和客户端都需要的接口类。

    package com.lilin.maven.maven_intf;
    
    /**
     * @author lilin
     * 
     */
    public interface ISayHello {
        /**
         * 测试接口接口方法
         */
        void sayHello(String name);
    
    }

    2.定义好服务端的实际实现代码SayHelloService。

    package com.lilin.maven.maven_intf;
    
    /**
     * @author lilin
     * 
     */
    public class SayHelloService implements ISayHello {
    
        @Override
        public void sayHello(String name) {
            System.out.println("hello:" + name);
        }
    
    }

    3.使用spring的配置spring的httpinvoker服务,配置web.xml中的servlet,配置rmi-server.xml文件,将配置的service的bean发布为HTTP服务。

    servlet配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <display-name>SpringRMI</display-name>
        <servlet>
            <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:/remote-servlet.xml</param-value>
            </init-param>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    rmi-server的配置:

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        <bean id="sayHello" class="com.lilin.maven.maven_intf.SayHelloService" />
        <bean name="/sayHello"
            class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
            <property name="service" ref="sayHello" />
            <property name="serviceInterface" value="com.lilin.maven.maven_intf.ISayHello" />
        </bean>
    </beans>

    4.使用spring配置客户端的代理bean,配置rmi-client.xml,把远程的服务方法配置为bean,可以方便注入。

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    
    <beans>
        <bean id="sayHello"
            class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
            <property name="serviceUrl">
                <value>http://localhost:8080/maven-web-in/sayHello</value>
            </property>
            <property name="serviceInterface">
                <value>com.lilin.maven.maven_intf.ISayHello</value>
            </property>
        </bean>
    
    </beans>

     5.定义好服务端和客户端调用的测试代码,首先启动服务端,发布HTTP服务,然后启动测试端代码通过HTTP调用远程服务。

    服务端:启动server后,可以看到如下信息:

    信息: Mapped URL path [/sayHello] onto handler '/sayHello'
    2016-3-29 0:38:51 org.springframework.web.servlet.FrameworkServlet initServletBean
    信息: FrameworkServlet 'Spring MVC Dispatcher Servlet': initialization completed in 1670 ms
    2016-3-29 0:38:51 org.apache.coyote.AbstractProtocolHandler start
    信息: Starting ProtocolHandler ["http-bio-8080"]
    2016-3-29 0:38:51 org.apache.coyote.AbstractProtocolHandler start
    信息: Starting ProtocolHandler ["ajp-bio-8009"]
    2016-3-29 0:38:51 org.apache.catalina.startup.Catalina start
    信息: Server startup in 5547 ms
    则表示当前的发布服务成功!

      客户端:获取client配置的bean,直接调用远程服务方法,可以得到正确结果如下:

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.lilin.maven.maven_intf.ISayHello;
    
    /**
     * 客户端调用类
     * 
     * @author King
     * 
     */
    public class Client {
        // 读取配置文件
        static ApplicationContext context = new ClassPathXmlApplicationContext(
                "remote-client-local.xml");
    
        public static void main(String[] args) {
            new Client().sayHello();
        }
    
        public void sayHello() {
            ISayHello sayHello = (ISayHello) context.getBean("sayHello");
            sayHello.sayHello("李林");
        }
    
    }

    到此简单的spring的httpinvoker的远程服务调用,基于spring的配置就全部结束了,值得注意的是:

    spring的httpinvoker的使用场景:考虑网络限制,并且希望使用基于xml或者专有的java序列化机制时候哦,访问/发布基于spring的服务。

    参见的是spring in action 第三版

  • 相关阅读:
    极域电子教室 e-Learning Class V4 2010专业版 学生机 卸载方法
    浅谈IT员工管理
    apacheserver下载、安装、配置
    Android BLE开发之Android手机搜索iBeacon基站
    Qt编程18:Qt调色板QPalette的使用
    二叉树的操作
    Android应用开发多语言drawable目录
    Mybatis文档阅读笔记(明日继续更新...)
    《Spark快速大数据分析》—— 第六章 Spark编程进阶
    Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统
  • 原文地址:https://www.cnblogs.com/lilin0719/p/5331381.html
Copyright © 2020-2023  润新知