文档章节

淘宝HSF服务的原理以及简单的实现

引鸩怼孑
 引鸩怼孑
发布于 2016/02/03 17:17
字数 970
阅读 595
收藏 2

淘宝HSF服务的原理以及简单的实现

淘宝HSF服务具体来说分三个应用:api接口,service服务,本地应用。

       最基本的Api服务应该是十分干净的,不含方法,只有接口。它是要被打包(jar包的形式)到中央仓库去的。

       service服务是api接口的实现,它是要被打包成(最常见的是war包)安装到远程tomcat,或jboss中,作为服务要随时等待各种应用的调用的。

       本地应用自然是各种应用了。

       接口部分的pom文件:

                     <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/maven-v4_0_0.xsd">
                                    <modelVersion>4.0.0</modelVersion>
                                     <groupId>com.taobao.hsftest</groupId>
                                      <artifactId>itest</artifactId>
                                      <version>1.0.0.SNAPSHOT</version>
                       </project>

         接口:

                        package com.taobao.itest;

                                public interface HelloService {
    
                                             public void sayHello();
                        }
            实现类的信息:
           pom文件:

               <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.taobao.testimpl</groupId>
  <artifactId>testimpl</artifactId>
  <version>1.0.0.SNAPSHOT</version>
  <description>hsf hello</description>
  <properties>
        <java.version>1.6</java.version><!-- JDK版本配置属性 -->
  </properties>
  <build>
        <finalName>hsf-sample</finalName><!-- 打包时的war包名称: hsf-sample.war -->
        <plugins>
            <plugin><!-- 对maven编辑插件进行定制 -->
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source><!-- 指定JDK版本 -->
                    <target>${java.version}</target><!-- 指定JDK版本 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
  <dependencies>
      <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.taobao.hsf</groupId>
            <artifactId>hsfunit</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
        </dependency>
        <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
      <dependency>
          <groupId>com.taobao.hsftest</groupId>
          <artifactId>itest</artifactId>
          <version>1.0.0.SNAPSHOT</version>
      </dependency>
  </dependencies>
</project>

     applicationContext.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.5.xsd">
    <bean id="helloWorldServiceImpl" class="com.taobao.itest.impl.HelloService"></bean>
    <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
        <property name="serviceInterface">
            <value>com.taobao.itest.HelloService</value>
        </property>
        <property name="target">
            <ref bean="helloWorldServiceImpl" />
        </property>
        <property name="serviceVersion">
            <value>1.0.0.zhanqiong</value>
        </property>
    </bean>
</beans>
     启动文件:

package com.taobao.itest.impl;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.taobao.hsf.hsfunit.HSFEasyStarter;

public class Main {

    public static void main(String[] args) {
        try {
            HSFEasyStarter.startFromPath("D:\\taobao-hsf");
            Thread.sleep(1000);
        
            
            new ClassPathXmlApplicationContext("applicationContext.xml");
            System.out.println("Start end by zhanqiong!");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

 

也可以将server交给容器启动,此时首先需要该工程为war工程

在web.xml文件中添加spring管理

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>service</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationcontext.xml</param-value>
  </context-param>
  <listener>    
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

打包部署到tomcat或jboss容器下

本地调用:

pom文件:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.taobao.client.clienthsf</groupId>
  <artifactId>clienthsf</artifactId>
  <version>1.0.0-SNAPSHOT</version>
    <dependencies>
      <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.5_spec</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.taobao.hsf</groupId>
            <artifactId>hsfunit</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
        </dependency>
        <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>
      <dependency>
          <groupId>com.taobao.hsftest</groupId>
          <artifactId>itest</artifactId>
          <version>1.0.0.SNAPSHOT</version>
      </dependency>
      </dependencies>
</project>

applicationContext.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.5.xsd">

    <bean id="helloWorldService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"
        init-method="init">
        <property name="interfaceName">
            <value>com.taobao.itest.HelloService</value>
        </property>
        <property name="version">
            <value>1.0.0.zhanqiong</value>
        </property>
    </bean>
</beans>

 

本地调用代码:

package com.taobao.clienthsf;

import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.taobao.hsf.hsfunit.HSFEasyStarter;
import com.taobao.itest.HelloService;

public class Main {
    
    private HelloService helloWorldService;
    private void test(){
        try {
            HSFEasyStarter.startFromPath("D:\\taobao-hsf");
            Thread.sleep(1000);
            helloWorldService =    (HelloService) new ClassPathXmlApplicationContext("applicationContext.xml").getBean("helloWorldService");
        } catch (BeansException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        helloWorldService.sayHello();
    }
    public HelloService getHelloWorldService() {
        return helloWorldService;
    }
    public void setHelloWorldService(HelloService helloWorldService) {
        this.helloWorldService = helloWorldService;
    }
    public static void main(String[] args) {
    
            for(int i=0;i<10;i++){
                new Main().test();
            
            }
    }
}


      三个工程的具体实现我已经跑通并且放到了我本地的资源文件了。


本文转载自:http://www.cnblogs.com/zhwl/p/3642472.html

引鸩怼孑
粉丝 44
博文 207
码字总数 16947
作品 0
南京
项目经理
私信 提问
RSF 1.0.1 分布式服务框架,新增 Spring/JFinal 支持

RSF 1.0.1 分布式服务框架,新增 Spring/JFinal 支持。 Hasor-RSF是一个高可用、高性能、轻量级的分布式服务框架。支持容灾、负载均衡、集群。一个典型的应用场景是,将同一个服务部署在多个...

哈库纳
2016/11/08
2.2K
8
分布式服务框架 RSF 1.1.0 ,新增网关和 Bug 修复

分布式服务框架 RSF 1.1.0 发布了。 更新日志 一个高可用、高性能、轻量级的分布式服务框架。支持容灾、负载均衡、集群。一个典型的应用场景是,将同一个服务部署在多个Server上提供 reques...

哈库纳
2016/12/01
2.1K
11
RSF 1.3.0 正式发布,剥离注册中心、修正多协议兼容

RSF 1.3.0 正式发布啦,本地发布主要是:剥离出独立的注册中心、修正多协议兼容的问题 一个高可用、高性能、轻量级的分布式服务框架。支持容灾、负载均衡、集群。一个典型的应用场景是,将同...

哈库纳
2017/02/20
1K
1
RSF 1.0.0 分布式服务框架正式发布

一个高可用、高性能、轻量级的分布式服务框架。支持容灾、负载均衡、集群。一个典型的应用场景是,将同一个服务部署在多个Server上提供 request、response 消息通知。使用RSF可以点对点调用,...

哈库纳
2016/10/27
6.1K
23
Java中间件:淘宝网系统高性能利器

【TechTarget中国原创】淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝。如此多的用户和交易量,也意味着海量的信息处理,其背后...

老先生二号
2017/06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
16分钟前
1
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
17分钟前
1
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
32分钟前
2
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
34分钟前
3
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部