`
bit1129
  • 浏览: 1070005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架

 
阅读更多

HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成

 

【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中介绍了基于Hessian的RPC服务的实现步骤,在那里使用Hessian提供的API完成基于Hessian的RPC服务开发和客户端调用,本文使用使用【RPC框架Hessian二】Hessian 对象序列化和反序列化定义的模型和接口、服务器段代码,来实现HttpInvoker的RPC调用。

 

定义模型、接口和服务器端代码

|---Model

        |--ComplexModel

        |--Person

        |--Point

 

|---Interface

        |--IComplexModelService

 

|---Service Implementation

        |--ComplexModelService

 

 

定义pom.xml

 添加对Spring、Hessian和Spring Remoting的支持

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hessian.project</artifactId>
        <groupId>com.tom</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>learn.hessian.spring.integration</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>4.0.38</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-remoting</artifactId>
            <version>2.0.8</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!--jetty plugin to manage embedded jetty-->
            <!--No goal  is specified-->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.7</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8668</port>
                            <maxIdleTime>30000</maxIdleTime>
                        </connector>
                    </connectors>
                    <webAppSourceDirectory>${project.basedir}/web
                    </webAppSourceDirectory>
                    <contextPath>/web</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

定义web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>hessian</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext-hessian-server.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>hessian</servlet-name>
        <url-pattern>/hessian/*</url-pattern>
    </servlet-mapping>
</web-app>

 

定义applicationContext-hessian-server.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!-- 服务暴露 -->
    <!--HttpInvokerServiceExporter代替HessianServiceExporter-->
    <bean name="/complexModelService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <!-- 服务类 -->
        <property name="service">
            <bean id="complexModelService" class="com.tom.hessian.server.ComplexModelService"/>
        </property>
        <property name="serviceInterface">
            <value>
                com.tom.hessian.common.IComplexModelService
            </value>
        </property>
    </bean>

</beans>

 

定义applicationContext-hessian-client.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!--远程对象代理工厂-->
    <!--HttpInvokerProxyFactoryBean代替HessianProxyFactoryBean-->
    <bean name="complexModelService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <!--HttpInvokerProxyFactoryBean没有connectTimeout属性-->
        <property name="connectTimeout" value="60000"/>
        <property name="serviceUrl" value="http://localhost:8668/web/hessian/complexModelService"/>
        <property name="serviceInterface" value="com.tom.hessian.common.IComplexModelService"/>
    </bean>

</beans>

 

定义客户端测试代码

 

package com.tom.hessian.client;

import com.tom.hessian.common.ComplexModel;
import com.tom.hessian.common.IComplexModelService;
import com.tom.hessian.common.Person;
import com.tom.hessian.common.Point;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ComplextModelServiceSpringTest {

    public static void main(String[] args) throws Exception {
        ComplexModel<Point> model = new ComplexModel<Point>();
        model.setId(1);
        Person person = new Person();
        person.setName("Tom");
        person.setAge(86);
        person.setBirthDay(new Date());
        person.setSensitiveInformation("This should be private over the wire");
        model.setPerson(person);

        List<Point> points = new ArrayList<Point>();
        Point point = new Point();
        point.setX(3);
        point.setY(4);
        points.add(point);

        point = new Point();
        point.setX(100);
        point.setY(100);
        points.add(point);

        model.setPoints(points);


        //远程方法调用
        ClassPathXmlApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext-hessian-client.xml");
        IComplexModelService service = cxt.getBean("complexModelService", IComplexModelService.class);
        service.save(model);
        model = service.read(model.getId());
        List<Point> points1 = model.getPoints();
        for(Point elem : points1) {
            System.out.println(elem.getX() + "\t" + elem.getY());
        }

    }

}

 

运行

启动Jetty Server,然后运行上面的客户端代码,可以正常执行

分享到:
评论

相关推荐

    springboot-httpinvoker-demo.zip

    而在微服务架构中,服务间通信是必不可少的一部分,HTTP Invoker作为Spring框架的一个组件,为Spring Boot应用提供了一种轻量级的远程方法调用(RMI)方案。本篇将深入探讨SpringBoot HTTP Invoker的原理、配置以及...

    http invoker 做post测试

    HTTP Invoker 是一个Java框架,主要用于在分布式系统中进行远程方法调用(RPC)。它通过HTTP协议提供服务,使得客户端可以像调用本地方法一样调用远程服务。在这个场景下,“http invoker 做post测试”指的是在完成...

    用Http Invoker实现RCP客户端与后台的交互

    `Http Invoker`是Spring框架提供的一种基于HTTP协议的RPC实现,主要用于Java应用程序之间进行服务调用。本文将深入探讨如何使用Http Invoker实现RCP客户端与后台的交互,以及相关知识点。 1. **Http Invoker的基本...

    spring-httpinvoker-demo

    Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...

    Java Spring1.2 Remote Invoke HTTP Invoker

    Java Spring 1.2 远程调用HTTP Invoker是一个基于HTTP协议的远程服务调用框架,它是Spring框架的一部分,允许应用通过HTTP协议进行服务间的通信。这种通信方式相对于RMI(Remote Method Invocation)等其他远程调用...

    Hessian 、 HttpInvoker 、 XFire 、 Axis

    HttpInvoker是Spring框架的一部分,它基于HTTP协议,使用Java的序列化机制来传递对象。HttpInvoker主要面向Spring应用程序,易于集成,但相比Hessian,其数据传输效率较低,因为HTTP协议本身较重,且Java序列化也...

    Eclipse工程Http Invoker Service & Client

    Http Invoker是Spring框架的一个组件,允许在分布式环境中通过HTTP协议透明地调用Java对象的方法,提供了一种轻量级的RPC(Remote Procedure Call)实现。 **Http Invoker服务端(Service)** 在Http Invoker...

    基于Spring的HttpInvoker实现改写egova_invoker.zip

    基于Spring的HttpInvoker实现改写服务器端调用: HttpInvoker.invoker 方法,设置InvokerProcess处理客户端调用: ProxyFactory.proxy 方法,生成接口的代理对象,直接调用方法客户端和服务器端的接口和实体类要...

    Java学习之路-Spring的HttpInvoker学习

    但当传递过来的RPC消息中包含序列化对象时,RMI完胜Hessian和Burlap了。  因为Hessian和Burlap都是采用了私有的序列化机制,而RMI...  Spring的HttpInvoker,它基于HTTP之上提供RPC,同时又使用了Java的对象序列化机

    使用spring远程调用服务端接口实现WebService功能

    下面将详细阐述Spring框架如何帮助开发者实现这一功能。 首先,我们要理解Spring的HttpInvokerServiceExporter。它是Spring框架中的一个关键组件,用于将普通的Java方法暴露为可以通过HTTP请求调用的服务。它基于...

    spring远程调用

    HttpInvoker是Spring框架的一部分,它基于HTTP协议实现了远程过程调用(RPC)。与RMI(Remote Method Invocation)相比,HttpInvoker更适合于跨越防火墙的场景,因为它使用的是标准的HTTP协议,而RMI可能被防火墙...

    spring jar 包详解

    - **功能简介**:包含了支持 EJB、JMS、远程调用 Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 - **应用场景**:适用于需要实现远程调用功能的项目。 - **依赖关系**:依赖于 `spring-core....

    基于Spring的RPC通讯模型的使用与比较

    HTTP Invoker是Spring自带的RPC解决方案,它使用HTTP协议来传输RPC调用。客户端可以使用HttpInvokerProxyFactoryBean来创建代理,并使用该代理来调用远程服务。 三、客户端和服务端的实现 客户端: * 客户端需要...

    Spring2.5参考手册

    4. **远程服务调用(Remote Procedure Call,RPC)**:Spring支持RMI(远程方法调用)和其他远程服务调用机制,如HTTP Invoker,使得分布式系统间的通信变得更加便捷。 5. **Web服务支持(Web Services)**:Spring...

    Spring 实现远程访问详解——rmi

    2. Spring的HTTP调用器(Spring’s Http Invoker): Spring提供了一种特殊的允许通过HTTP进行Java串行化的远程调用策略,支持任意Java接口(就像RMI调用器)。相对应的支持类是 HttpInvokerProxyFactoryBean和 ...

    基于Spring的远程访问与Web Service

    标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...

    远程调用服务框架

    4. **HTTP Invoker**:HTTP Invoker是Spring为Java对象提供的另一种远程调用方案,它基于HTTP协议,但提供了类似RMI的透明调用体验。HTTP Invoker通过序列化和反序列化Java对象,实现了跨JVM的远程方法调用。 在...

    Dubbo-RPC分布式服务框架.pptx

    Dubbo-RPC分布式服务框架 Dubbo 是阿里巴巴开发的一个分布式服务框架,...采用 Spring-Invoker 实现。 5. Webservice – 基于 SOAP 协议的 RPC 框架,支持多种数据类型,例如 XML、JSON 等,适合企业之间的集成。

    Spring——jar详解

    9. **spring-remoting.jar**:提供了对远程调用的支持,如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker和JAX-RPC。 10. **spring-support.jar**:包含缓存、JCA、JMX、邮件服务、任务调度等高级功能的类。 11. **...

    http接口相关介绍

    Spring HTTP Invoker是Spring框架提供的一个远程调用模型,它允许通过HTTP进行远程调用,这意味着可以在防火墙环境下实现服务间的通信。与传统的远程过程调用(RPC)不同,Spring HTTP Invoker简化了客户端和服务端...

Global site tag (gtag.js) - Google Analytics