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

Spring HttpInvoker的封装

 
阅读更多


Spring HttpInvoker的简单封装,优点如下:

1、客户端无xml配置
2、客户端基于接口调用,无需知道接口的服务名。
(大众型使用方式:接口可以打成jar分发到服务端和客户端程序使用。我是使用maven构建项目,所以建立了一个service-code项目供serviceProject和clientProject引用)
3、服务端只需配置简单的2步骤,后面介绍。

封装文件一共7个类,先分别说下客户端和服务端的使用配置,再解释原理:

SpringMVCApplicationContextUtil.java

SpringRemoteServiceContext.java

RemoteServiceDescService.java

DefaultRemoteServiceDescServiceImpl.java

HttpInvokerRemoteServiceDescContainer.java

HttpInvokerClientServiceFactory.java

RemoteConnectFailureExceptionExt.java

 

客户端调用服务的示例代码如下:

HttpInvokerClientServiceFactory.init();//只需初始化一次
String serverURL = "http://localhost:8080/liangfa-analysis";//服务地址
//获得远程服务TestService,就像是调用本地服务那样(自行捕获通信异常)
TestService testService = HttpInvokerClientServiceFactory.getService(serverURL, TestService.class);
//调用服务
testService.sayHello();
//客户端api是不是很简单?? 只需要一个HttpInvokerClientServiceFactory就搞定了 : )

 

 

服务端的2处配置:

1、配置远程服务文件remoting-servlet.xml,除了配置业务有关的服务(如TestService),需要加入RemoteServiceDescService,服务名约定为“/remote/remoteServiceDesc”

(HttpInvokerRemoteServiceDescContainer中有常量配置)

<!--暴漏远程服务:服务列表描述 required-->
    <bean name="RemoteServiceDescService" class="com.ksource.liangfa.ws.core.util.remote.DefaultRemoteServiceDescServiceImpl">
    </bean>
    <bean name="/remote/remoteServiceDesc" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="RemoteServiceDescService"></property>
        <property name="serviceInterface" value="com.ksource.liangfa.ws.core.util.remote.RemoteServiceDescService"/>
    </bean>

    <!--测试服务-->
    <bean name="/remote/TestService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="RemoteTestService"></property>
        <property name="serviceInterface" value="com.ksource.liangfa.ws.core.service.datacenter.TestService"/>
    </bean>
......其他服务.......

 
2、初始化服务描述的上下文(remoting-servlet.xml)

SpringRemoteServiceContext.initContext(SpringMVCApplicationContextUtil.getWebApplicationContext(config.getServletContext(), "springServletName"));

 

我的做法是在项目的初始化servlet(SystemInit.init)里调用,如下:
配置web.xm,在项目启动servlet里

<servlet>
        <servlet-name>SystemInit</servlet-name>
        <servlet-class>com.ksource.syscontext.SystemInit</servlet-class>
        <load-on-startup>3</load-on-startup>
  </servlet>

 

  

 public class SystemInit extends HttpServlet {
  
      @Override
      public void init(ServletConfig config) throws ServletException {
		SpringRemoteServiceContext.initContext(SpringMVCApplicationContextUtil.getWebApplicationContext(config.getServletContext(), "springServlet"));
	.......
	.......
	}
  }

  

   
实现思路:

SpringMVCApplicationContextUtil用于获取spring mvc的bean容器,这个容器包含了spring mvc配置文件里配置的bean(同样包含remoting-servlet.xml)

DefaultRemoteServiceDescServiceImpl本身也是暴漏的服务,但他的作用主要是用于描述服务端暴漏的服务,有点类WSDL的意味。

SpringRemoteServiceContext通过bean容器找出暴漏的服务,保存到map中

public class SpringRemoteServiceContext {
 private static Map<String, HttpInvokerServiceExporter> servicesMap;
 public static void initContext(
   ApplicationContext applicationContext) {
  servicesMap = applicationContext.getBeansOfType(HttpInvokerServiceExporter.class);
 }
 public static Map<String, HttpInvokerServiceExporter> getServicesMap(){
  return servicesMap;
 }
}

 
HttpInvokerRemoteServiceDescContainer用于保存一个服务端的全部接口的服务地址。

HttpInvokerClientServiceFactory用于根据接口名称,来获取远程服务对象。
HttpInvokerClientServiceFactory.getService(String serverUrl, Class<T> clazz)方法,会根据
serverUrl来获取HttpInvokerRemoteServiceDescContainer对象,然后通过服务描述来创建HttpInvokerProxyFactoryBean对象,然后HttpInvokerProxyFactoryBean.getObject()来得到远程服务。

 

大致思路如上,整理的比较乱,可参见源码,包名可自行修改后使用。

分享到:
评论
1 楼 BiLaHePan 2017-03-16  
博主,源码不全啊,把maven 构建的项目都发上来。

相关推荐

    springboot-httpinvoker-demo.zip

    同时,使用`@HttpInvokerService`注解暴露该服务,指定远程访问的URL。 3. 配置服务消费方:在服务消费方,使用`@HttpInvokerProxyFactoryBean`来创建服务代理,指定服务的URL和接口类型。这样,消费方就可以像调用...

    Java Spring2.5 Remote Invoke HTTP Invoker

    Java Spring 2.5 Remote Invoke HTTP Invoker 是一个基于HTTP协议的远程调用框架,它允许Spring应用通过HTTP协议来调用远程服务。这个技术在分布式系统中非常有用,因为它可以轻松地跨越网络边界,实现服务间的通信...

    http接口相关介绍

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

    spring jar 包详解

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

    最新最全的spring开发包

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    spring-web.jar spring-webmvc.jar

    2. **HTTP处理**:包括`HttpInvoker`和`Remoting`支持,用于远程方法调用,使得服务可以通过HTTP协议进行通信。 3. **MIME类型解析**:`MultipartResolver`接口处理多部分(multipart)HTTP请求,如上传文件。 4. **...

    夏昕spring

    Spring框架还支持远程服务调用,如RMI、HTTP Invoker等,使得分布式系统间的通信变得简单。 #### AOP(面向切面编程) Spring框架的AOP模块提供了一种声明式方式来实现横切关注点,如日志记录、安全控制等,无需...

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker 邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    Spring——jar详解

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

    spring jar包

    - `spring-web`: 提供了Servlet相关的工具类,如HttpInvoker和WebSocket支持。 - `spring-webmvc`: Spring MVC,一个强大的模型-视图-控制器(MVC)框架,用于构建Web应用程序。 5. **测试模块**: - `spring-...

    Spring2.5jar所有开发包及完整文档及项开发实例.pdf

    9. `spring-remoting.jar`:提供EJB,JMS,远程调用(RMI,Hessian,Burlap,Http Invoker,JAX-RPC)的支持。 10. `spring-support.jar`:包含缓存(如ehcache),JCA,JMX,邮件服务(Java Mail,COS Mail),...

    远程调用服务框架

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

    SPRING各实用开发包用途及解释

    此库为远程调用提供了支持,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等远程服务调用方式。对于需要实现分布式应用的服务交互来说,这是一个非常有用的库。 ##### (10) spring-support.jar 该库为...

    spring in action

    - **远程调用**:Spring支持多种远程调用协议,如RMI、HTTP Invoker等,方便进行分布式系统的开发。 - **企业服务访问**:Spring支持访问各种企业服务,如JMS、邮件服务等。 #### 五、Web层集成 - **构建Web层**...

Global site tag (gtag.js) - Google Analytics