精华内容
下载资源
问答
  • 阿里hsf接口 sar包

    2019-04-14 17:51:59
    由于不同的调用方式可能会用到不同sar文件所以这里我把自己收集的两种sar包上传供大家使用,有时出现调用问题时换个包试试
  • 2、创建hsf-consumer.xml 配置好要测试的hsf接口 xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xmlns:context=...

    1、新建一个springboot项目,添加maven依赖

    <!-- Alibaba EDAS Dependency -->
            <dependency>
                <groupId>com.alibaba.edas</groupId>
                <artifactId>edas-sdk</artifactId>
                <version>1.5.4</version>
            </dependency>
            <dependency>
                <groupId>com.taobao.hsf</groupId>
                <artifactId>LightApi</artifactId>
                <version>1.0.5</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>${commons-lang.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
    

    2、创建hsf-consumer.xml 配置好要测试的hsf接口

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:hsf="http://www.taobao.com/hsf"
           xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context" 
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-4.0.xsd  
           http://www.taobao.com/hsf
           http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> 
           
        <!-- Annotation Scan -->
    	<context:annotation-config/>
    	<context:component-scan base-package="com.kd.modeltest"/>
    
        <!--<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">-->
            <!--<property name="resources" value="classpath:application.yml"/>-->
        <!--</bean>-->
    
        <!--<context:property-placeholder properties-ref="yamlProperties"/>-->
    
        <!-- 消费服务 -->
        <hsf:consumer id="testService" interface="com.kd.modelapi.api.TestService"
        version="1.0.0" group="model">
        </hsf:consumer>
    
        <hsf:consumer id="modelCenterService" interface="com.kd.modelapi.api.IModelCenterService"
                      version="1.0.0" group="model">
        </hsf:consumer>
        
    </beans>
    

     

    3、在生成的test目录下的测试类中写代码,

    package com.kd.modeltest;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.kd.modelapi.api.IModelCenterService;
    import com.kd.modelapi.api.TestService;
    import com.kd.modelapi.common.ResponseDto;
    import com.kd.modelapi.vo.TestUserVo;
    import com.taobao.hsf.lightapi.ServiceFactory;
    import com.taobao.hsf.standalone.HSFEasyStarter;
    import com.taobao.hsf.standalone.util.ServiceUtil;
    import org.junit.runner.RunWith;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.test.context.junit4.SpringRunner;
    
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    public class ModelTestApplicationTests {
    
        @Value("${hsf.version}")
        private String version;
        @Value("${hsf.group}")
        private String group;
        private static String service = "com.kd.modelapi.api.TestService";
        private static String provider = "testServiceProvider";
        private static String consumer = "testService";
        private static String consumerXml = "hsf-consumer.xml";
        private static String sarPath = "E:\\software\\taobao-tomcat-7.0.59\\deploy";
    
        private Logger logger = LoggerFactory.getLogger("ModelTestApplicationTests");
    
      
    
        /**
         * 通过HSFUnit进行单元测试  最简单测试
         */
        //@Test
        public void contextLoadsInit() {
            String consumer = "testService";
            HSFEasyStarter.start(sarPath, "");//在用到consumer bean前启动hsf
            String springResourcePath = consumerXml;
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(springResourcePath);
            TestService testService = (TestService) ctx.getBean(consumer);
            ServiceUtil.waitServiceReady(testService);
            //add
    //        TestUserVo tuv1 = new TestUserVo();
    //        tuv1.setOffset(100);
    //        tuv1.setUserName("zjy");
    //        tuv1.setUserParentName("zzz");
    //        tuv1.setUserDesc("this is a people");
    //        ResponseDto responseVo1 = testService.addTestUser(tuv1);
    //        System.out.println(responseVo1.toString());
            //query
            TestUserVo tuv2 = new TestUserVo();
            tuv2.setId(3);
            ResponseDto responseVo2 =  testService.queryTestUser(tuv2);
            System.out.println(responseVo2);
        }
    
        /**
         * 通过阿里提供的lightApi代码进行单元测试
         * 目前无法使用 需要更换sar包
         */
    	//@Test
        public void lightApi() {
            // 这里设置Pandora地址,参数是sar包所在目录,如这里我的sar包地址是/Users/Jason/Work/AliSoft/PandoraSar/DevSar/taobao-hsf.sar,则只取前面的地址即可
            final ServiceFactory factory = ServiceFactory
                    .getInstanceWithPath(sarPath);
            // 进行服务发布(若有发布者,无需再这里写)
    		/*factory.provider(provider)// 参数是一个标识,初始化后,下次只需调用provider("helloProvider")即可拿出对应服务
    				.service(service)// 接口全类名
    				.version(version)// 版本号
    				.group(group)// 组别
    				.impl(new UserServiceImpl())// 对应的服务实现
    				.publish();// 发布服务,至少要调用service()和version()才可以发布服务*/
    
            // 进行服务消费
            factory.consumer(consumer)// 参数是一个标识,初始化后,下次只需调用consumer("helloConsumer")即可直接拿出对应服务
                    .service(service)// 接口全类名
                    .version(version)// 版本号
                    .group(group)// 组别
                    .subscribe();
            // 同步等待地址推送,最多6秒。
            try {
                factory.consumer(consumer).sync();
            }catch (Exception e){
                e.printStackTrace();
            }
            // 用ID取出对应服务,subscribe()方法返回对应的接口
            TestService testService = (TestService) factory.consumer(consumer).subscribe();
            // 调用服务方法
            //testService.testHsf();
        }
    
        /**
         * 通过阿里提供的lightApi包,使用xml进行单元测试
         * 目前无法使用
         */
    	//@Test
        public void xmlTest(){
            //XML 方式加载服务提供者
    //		new ClassPathXmlApplicationContext("hsf-provider-beans.xml");
            //XML 方式加载服务消费者
            ClassPathXmlApplicationContext consumerContext=
                    new ClassPathXmlApplicationContext("hsf-consumer.xml");
            //获取 Bean
            TestService testService=(TestService) consumerContext.getBean(consumer);
            //服务调用
            //testService.testHsf();
        }
    
    }
    

    注意 sar路径是指向你本地的sar包路径,更换sar包可以用不同的测试方法,资源可以到我分享的资源去下载。

     

    展开全文
  • 阿里妹导读:相信大家对 HSF 控制台并不陌生,它是我们测试 HSF 接口的首选工具。对于使用频率这么高的工具,有没有办法提高它的效率呢?本文将分享如何从调试的环节中一步一步缩短测试时间并最终实现一个IDEA的 HSF...

    8288e73a3e620ec6238bbcf299f75cda.png

    阿里妹导读: 相信大家对 HSF 控制台并不陌生,它是我们测试 HSF 接口的首选工具。对于使用频率这么高的工具,有没有办法提高它的效率呢?本文将分享如何从调试的环节中一步一步缩短测试时间并最终实现一个  IDEA  的 HSF 插件。 文末福利:21 组实战带你学习 Java 面向对象编程。 在我们日常工作中,调试工作占据了很大一部分工作。同时伴随着服务化的兴起,各个领域拆分建设,应用数量也是越来越多,项目调试难度也在逐渐增大。 在项目调试过程中,一般应用的调试内容无非由以下三部分组成:

    f1236b3e66c03be7df4488117c312759.png

    这三部分调试中,RPC 大部分时候又占据了绝大部分。目前主流 RPC 产品为  DUBBO,阿里内部则使用 HSF。虽有所差异,不过核心思路基本一致。 今天作者就来说说我们是如何来做 RPC 调试的。 有人说 RPC 调试有什么好说的,很简单啊。调试是很简单,但做到高效的调试是不简单的。 因为日常使用 PRC 调试的频率很高,如果能大幅提高调试效率那对日常工作的帮助绝对杠杠的。 既然要提效,我们先来看看现在是怎么做 RPC 调试的吧。 一般一次 RPC 调试由以下 4 个部分组成:

    393e9edf7d4e9fc7df2420e614d07dd8.png

    我们先看下使用普通 HSF 控制台完成一次 RPC 调试需要的时间。 需要 9 个步骤大概 1 分钟时间 + 构造入参大概 2 分钟,总计 3 分钟:

    c4f9cc2b8017822048486767c2066ac6.png

    如果能将 3 分钟缩减为 5 秒钟。那么粗略估计每天使用 HSF 10 次,一年使用 3600 次,可以节省 3*10*360 = 10800 分钟 ,有利可图啊。 从上面的流程我们可以看到,用了很多的步骤去找到最终的调试入口。作者感觉这种方式效率太低了。 想到的第一个办法就是将 HSF 控台的集成到 IDEA 中,这样在开发过程中直接从 IDEA 中发起请求调用,可以节省不少步骤免得使用浏览器了。 基于以上的思考作者尝试开发了一个 HSF 的 IDEA 插件 demo。 初期使用效果 之前需要 9 步的操作,可以节省到 6 步了,作者大概计算了下,需要时间变为 30 秒操作时间 + 2 分钟参数构造时间,到此我们节省了大约 30 秒的时间。

    37866de18047c2903ef7f2f263251e43.png

    这样将调试工具集成在 IDEA 中,可以方便的调出使用。快乐不少~ 基于以上 dem o 的功能,作者继续思考如何进一 步减少步骤。 发现我们每次都需要手动输入 appName 有点多余,能否根据当前用户自动加载出来呢? 原则上是可以的,只要拿到当前用户的登陆信息,然后基于用户信息,查找当前用户所负责的应用,就可以获取到用户的应用列表了。这样每次使用插件直接选择自己要调试的 RPC 应用不是很方便么。 经过作者四方探寻,获取到了用户的登陆信息,然后再通过 Aone 拉取用户 Owner 的 App 列表提供默认显示。 提供自动加载 appName 信息 路径:

    2372c9e840dccacfa3cb592b392a1e1e.png

    使用效果:展示当前登录者信息,按照登录者获取到 Aone 中 Owner 应用清单。作者实验了下这个功能大概又节省了 3 秒钟。

    e5528dc56701f8eb8d9419639c14992c.png

    完成这个功能后作者开始寻找进一步提效的方法。 我们来回顾下操作步骤:
    1. 选 appName

    2. 选接口

    3. 选方法

    4. 选目标环境

    5. 构造参数

    6. 发起调用

    从 27 秒缩减到 10 秒。 其中 appName 信息,接口信息,方法信息其实在我们的 IDEA 中已经有的啊,能否根据我们当前 IDEA 打开的文件来自动匹配到我们的接口和方法呢? 自动匹配接口 作者又四方打探,灵机一现。可否在我们需要测试的 Interface 文件上发起请求呢。当前 class 中有 Interface 信息、方法信息。试试看。 使用 IDEA 插件支持读取当前文件内容信息。我们可以打开需要测试的 interface 或者 HSFProvider,选中要测试的方法。 路径:

    ebaa953c5b051069f655a54808676cc8.png

    代码展示:
    /*** PsiClass 可以获取到当前文件信息 ,判断当前class是否接口* @param mainDialog* @param cls* @return*/private static boolean interfaceAutoLoad(MainDialog mainDialog, PsiClass cls) {          if (Objects.nonNull(cls) && cls.isInterface()) {                String interfaceName = cls.getQualifiedName();                  return loadInterface(mainDialog, interfaceName);              }              return false;    }
    效果:把一次 HSF 请求的操作压缩到 5 步 ,作者实验了一下以下步骤只需要 5 秒就可以完成,加上参数构造 2 分钟 = 2 分钟 5 秒。

    cf985a06453765e4876338f27aa7b4cd.png

    插件完成后请求小明来试用:

    小明试用了一段时间说:“你这个操作已经很方便了,不过我们在 HSF 执行时有一个问题,每次都得重新构造参数,很是浪费时间,可不可以支持参数收藏?”

    作者:“好想法,满足你。”

    支持入参收藏 在原有基础上追加了 2 个功能:
    1. 支持参数设置别名收藏,以后可以继续使用

    2. 支持执行的历史记录查看

    这样类似的 case 执行只需要加载历史记录,稍加修改参数就可以用啦。

    153bb510f30ea17c4228f69a2411365f.png

    功能完善后又请小明来试用:

    小明又发现了新的问题说:“你这个好用是好用,但是只支持日常,要是支持预发和线上环境就好了。我的场景需要使用相同的数据同时测试预发和线上接口。”

    作者:“好想法,满足你。”

    我们日常测试的时候经常需要线上线下环境切换,甚是麻烦。作者开始琢磨有没什么路径实现。

    a204d13741ba3882b3e5a8e6cdd4f675.png

    支持多环境 多环境的支持也非常重要,一般除了日常的调试,还有预发布环境和线上环境。如果能给使用者选择,不同环境预发调试也会变得很方便。 说干就干,因为各个环境是网络隔离的,需要到预发和线上分别部署机器,申请不同的域名,插件使用时给用户选择使用环境信息就可以了。 在插件端提供多环境选择,根据用户选择的环境,使用不同域名发起请求。实现支持多套环境。 实现效果:按照不同环境发起不同请求,支持多环境。

    7f8a60bb2face146f8b6766c6baf39cd.png

    至此,基于 IDEA 插件开发的 RPC 工具已经完成了。从目前使用效果来说也很好,很多同学来询问及使用,目前短短 2 个月,已经有超过 500+ 应用接入使用,能效提升明显。
    746268f71bf195cd34b32b896a55d71e.png 福利来了 746268f71bf195cd34b32b896a55d71e.png 21 组案例详解 Java 面向对象编程

    如何编写简单 Java 类、实现数组排序和转置功能、将数据表转化为 Java 内容?如何继承其他类或实现各种接口、怎样创造神奇的链表结构?结合实际场景,通过 21 个案例实战带你学习 Java 面向对象编程。

    70b10ba89aaf20aa7317fcb077f1534b.png


    推荐阅读

       Go 语言出现后,Java 还是最佳选择吗?

       阿里高级技术专家:整洁的应用架构“长”什么样?

       Java 工程师该如何编写高效代码?

    480f214e3e3279f4b4f6f54e373a8ddc.png 关注「阿里技术」 把握前沿技术脉搏 381129815e3de8f5924288b5d19f0fd2.gif 戳我,学习 Java 面向对象编程。
    展开全文
  • HSF的原理分析

    2020-12-24 08:15:04
    一.HSF的基本概念HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供...

    一.HSF的基本概念

    HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。

    二.知识准备

    通过以上的说明,大致了解了一下RPC与HSF的总体架构,但是总体架构离具体实现还想差很多,有些知识准备还是很有必要的。

    1.对象的序列化

    对象的序列化过程在RPC过程中是很重要的一个环节,序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也起着至关重要的作用。在HSF1.0时只支持两种序列化方式:java 和 hessian,在HSF2.0之后就支持了五种序列化方式:java、hessian、hessian2、json、kyro。但是目前版本中常用的序列化方式还是java 和 hessian两种。如果想细致的了解也可以多做了解。

    2.动态代理

    对于消费方来说,所存在的只有一个接口,虽然底层的实现原理我们知道,但是为了在使用时的高度透明,在JAVA语言层面上的表现形式则是通过动态代理的方式实现的,很多的逻辑都在InvocationHandler 中处理的。关于如何实现动态代理,还动态代理的一些使用的细节也可以稍作了解。

    3.网络通信NIO

    如果在网络传输过程中,采取普通的BIO,会有很多的问题存在,例如如果调用端有多个请求过来,那么就得需要多个线程去处理,每个线程都使用独立的连接,在远端的提供者端有对应的多个线程来执行相应的服务。这种方式会使得调用者和提供者之间建立大量的连接,而且是阻塞的方式,连接并不能得到充分的利用(摘自《大型网站系统与JAVA中间件》)。采用NIO则就可以避免这样的损耗,但是HSF在使用时并不是采用直接的NIO编程,而是通过第三方的框架Netty。

    二.HSF 实现原理

    1.提供服务的大致流程如下:

    • server启动时候向configserver注册

    • client启动时候向configserver请求list

    • client缓存list,发现不可用的server,从缓存中remove

    • configserver通过心跳包维护可用server的list

    • list有更新的时候,configserver通过带version的报文通知client更新

    从以上几个问题出发,看下HSF的实现方式。

    2.HSF的整体实现方式:

    从图中可以看出,HSF的实现方式可以理解为是C/S的架构,但是和传统的C/S架构相比还是有很大的不同,HSF没有真正的服务器,每个应用都可以成为服务的调用方和提供方。具体工作方式如下:

    ConfigServer:远程调用对端的地址就是由ConfigServer 来推送的,这样用户只需要配置自己的服务端或者消费端,不需要对自己的地址进行管理。

    Diamond:持久化的配置中心,用于配置服务调用的规则。

    服务:服务是调用方和提供方交流的依凭,一般是一个接口,表示一个业务行为以及相关的数据含义。通过使用HSFApiProviderBean能够暴露一个服务,将机器的地址注册到configserver,并且能够通过12200端口进行服务提供,通过HSFApiConsumerBean能够包装出一个客户端,它是服务接口的一个代理,并且它从configserver上订阅了服务的地址列表,能够在这个列表上完成随机调用,做到负载均衡与HA((High

    Available,高可用性群集)。

    网络通信:HSF的底层网络通信是使用netty框架实现的,是基于epoll的NIO的网络通讯框架,HSF在此使用的是长连接,通过合理的服务部署及负债均衡,基本不存在I/O方面的限制。

    三.HSF设计架构

    关于HSF的架构基本可以理解为C/S结构设计方式。(虽然HSF没有自己的服务器)

    Server端除了configServer外还有一个diamond用来保存一些持久化的配置信息,这里不进行过多的介绍。

    Client是HSF的重点,下面是各模块的功能介绍:

    Proxy:这一层主要负责接口的代理。基本上所有的RPC框架都会用到代理模式,相信大家不陌生。需要注意的是HSF的代理层还进行了软负载和单元化的处理。

    Remoting:这一层是HSF的应用层协议,定义了报文格式,各个字段的含义等信息,内容比较多,之后单独写一篇文章来介绍。

    Processer:这一层主要是处理HSF自身的业务逻辑,包括埋点、限流、鉴权等。

    Netty:上面三层会将一次服务调用或者服务返回包装成一个报文,然后通过这层传输。

    HSF调用流程

    上图是HSF整个的调用过程,从左向右看:第一条线路相当于consumer进行服务调用的过程,首先经过proxy层,将请求经过代理类包装出去;然后是Remoting层进行协议的包装,最后io层发送出去。第二条线路相当于provider将结果返回后解析的过程,与上一流程刚好相反。右边的provider两条调用流程相信大家都能按照上面的过程理解,就不一一讲解了。

    四.HSF处理请求流程

    1.HSF提供端初始化

    2.HSF消费端初始化

    3.消费方请求到提供方,响应一次调用

    4.实现细节

    心跳检测:

    1、客户端主动关闭连接:客户端第一次与服务端建立链接后,就会周期性(27s)发送心跳包的callback调用,如果连续三次收不到服务端的心跳包回应,客户端主动关闭链接

    2、服务端主动关闭连接:当连接59s没有调用(对方网络不可用,或者full gc太久),相当于两次(2*27s)收不到心跳包的时间

    从上图可以看出RPC要解决以下几个问题:

    如何解决网络通信问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。

    如何解决寻址问题,客户端如何找到制定的服务端,也就是保证准确有效的完成一次服务调用的前提。

    参数的传递及服务端在收到客户端请求后如何实现其具体功能并返回,由于网络传输协议是二进制的,内存中的参数值必须要解决序列化,反序列化,以及对半包,粘包的处理。

    五.HSF的优点:

    1.服务的自动注册、发现

    通过注册中心,实现服务的注册/注销与服务的发现。当服务启动后,会调用publish来将服务发布到中心,而服务的消费者,通过调用订阅接口传入的监听器来更新服务提供者列表。HSF提供了三种注册中心实现,分别是ConfigServer,Zookeper,和配置文件模式。

    这里仅对Zookeper进行分析,ZookeeperMetadataAddressService 实现了上述接口,在初始化中实例化了一个ZookeeperRegistry来进行管理,其使用了一个封装了zookeperclient的实例-ZkclientZookeeperClient,在注册服务的时候根据url参数中的Constants.DYNAMIC_KEY来确定创建Persistent节点还是Ephemeral节点,Ephemeral节点生命周期与本机连接绑定,这样就可以实现本机离线后的服务自动注销的功能。

    2) 服务提供者与消费者之间长连接。

    HSF采用长连接方式进行通信,相比短连接,长连接更具性能优势,避免连接重复创建与销毁带来的缓冲区申请与释放。HSF抽象了连接AbstractClient(Client),并采用了netty框架作为底层实现。netty是一个性能非常优秀的通信框架,基于反应器模式,内部采用了管线模式来解耦不同层次的逻辑之间的耦合问题。HSF为了强化TCP连接的可用性,增加HeartBeat功能,使用了一个Netty提供的 HashedWheelTimer 的定时任务调度器来执行心跳包的发送(补充:此HashedWheelTimer原理采用轮片式的桶结构,避免每次操作对全部任务的迭代操作,只对将要到期的桶进行操作,此原理也可用于缓存系统设计,在需要进行垃圾回收的情况下只需要按照桶为单位进行内存回收)。

    3) 非侵入性

    HSF最大优点是非侵入性,它使用了JAVA的Proxy机制来实现这一特点,在通过xml配置文件配置Consumer的时候,实际上是调用了 HSFApiConsumerBean ,在它的初始化方法中,读取了配置的实现接口,并在ProcessComponent中用一个封装了Proxy注册功能,并实现了InvocationHandler接口的类HSFServiceProxy去管理。使用者在自己的代码中无需做任何特殊处理,就像使用本地方法一样去调用其方法。

    4) 版本管理

    这一特性可以很灵活的帮助上线运营的服务在升级过程中避免服务不可用的情况。

    5) 服务治理

    可以通过网页可视化查看、管理、测试服务的可用。

    6) 扩展灵活

    可以接入自动服务降级功能(熔断) - 根据配置或服务的执行结果,在调用级控制服务是否调用执行,避免服务整体瘫痪,提升服务的可用性。

    原文链接:https://blog.csdn.net/qq_16681169/article/details/72512819

    展开全文
  • HSF、HTTP、RPC

    千次阅读 2019-06-05 15:41:44
    HSF 接口 和 HTTP 接口 .../** * 定义hsf接口: * 1. 分组信息: hsf服务分组 2. ID: hsf服务ID; 3. 方法: HSF服务生产者提供的RPC函数 */ <dubbo:reference id="paySuccessPageService" interfac...

    HSF 接口 和 HTTP 接口

    分布式服务框架: http://www.sohu.com/a/141490021_268033

    /**
    * 定义hsf接口:
    * 1. 分组信息: hsf服务分组 2. ID: hsf服务ID; 3. 方法: HSF服务生产者提供的RPC函数
    */
    <dubbo:reference 
      id="paySuccessPageService" interface="com.aliyun.lingxiao.api.PaySuccessPageService" 
      version="1.0.0" 
      protocol="dubbo" 
      check="false"/>
    /**
    * 分析上述例子:
    * 分组信息是:dubbo
    * ID:com.aliyun.lingxiao.api.PaySuccessPageService:1.0.0
    * 方法:getSubscribeData
    */
    

    中间层:是将后端写的 HSF 接口转换成 HTTP 接口,然后交给前端

    中间层主要做的工作就是:

    • 配置hsf接口信息,只有配置好了信息,才能调取服务
    • 实现接口 封装成前端需要的api

    HSF 接口本质是:interface 类

    RPC 和 HTTP

    RPC服务和HTTP服务对比有感。

    RPC: remote procedure call 远程过程调用,属于传输层TCP/IP协议

    HTTP: 应用层HTTP协议

    网络模型

    • 应用层: 数据和用户
    • 传输层: 端到端
    • 网络层: 网络设备之间
    • 链路层: 数据包转换为数据帧,供物理层使用
    • 物理层: 二进制数据

    RPC服务

    RPC基本架构

    • 客户端 client
    • 客户端存根 client stub
    • 服务端 service
    • 服务端存根 service stub

    client 调用 client stub;client stub 返回 client;

    service 调用 service stub;service stub 返回 service;

    client stub 与 service stub 之间传递网络消息。

    二方库

    比如:订单模块,先定义好所有的接口 Java interface,打包成 jar 包。然后由 service stub 实现这些接口,同时 client stub 也可以调用这个二方库获取到服务。

    优点:

    • 减少客户端 jar 包大小
    • 客户端和服务端解耦

    同步,异步问题

    同步: 客户端等待调用执行完成并返回结果 callback

    异步: 客户端不等待调用执行完成返回结果 runnable

    流行的RPC框架

    偷偷告诉你现在已经不怎么使用 dubbo 啦,现在用的比较多的叫 HSF,又名“好舒服”。后面有可能会开源,大家拭目以待。

    HTTP 和 RPC 的优势

    对于接口不多,系统与系统之间的交互较少的情况下:利用现成的HTTP协议进行传输。

    对于大型企业来说: 内部子系统非常多,接口非常多,这样 RPC 的好处就显示出来了。

    1. 对于长连接,不必每次通信都像 HTTP 一样去3次握手,减少网络开销
    2. 一般的 RPC 框架都有 注册中心,管控中心,发布,下线接口,动态扩展等。

    总之: RPC 效率更高,HTTP 迭代更快。

    展开全文
  • 接口测试

    2020-03-08 09:34:36
    接口 为实现代码复用或者功能复用而实现的,通过Http协议、Socket协议等提供给其他人调用的函数,我们测试的80%的接口都是基于HTTP协议的网络服务。 接口分类 1.按调用关系分类 垂直层:应用层与服务层传递数据的...
  • HSF接口返回值校验:按照场景和接口约定进行HSF返回参数校验。 DB校验:校验落地数据的正确性。 缓存校验:校验存入缓存中数据的正确性。 HSF依赖入参校验:通过mock工具获得依赖HSF调用的入参,进行入参校验。 ...
  • HSF (RPC远程调用框架)

    2021-12-21 20:40:33
    HSFHSF概述概述HSF架构功能应用开发方式使用 Ali-Tomcat 开发Ali-Tomcat概述安装及开发环境配置安装Ali-Tomcat和Pandora配置IntelliJ IDEA开发环境开发HSF应用定义服务接口开发服务提供者开发服务消费者本地运行服务...
  • HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remote Procedure Call,是...
  • HSF学习总结

    2018-10-12 19:57:00
    HSF其实是一个RPC框架,RPC是Remote Procedure Call,就是远程服务调用. 这个功能为什么要写个框架而不是十几行代码呢,因为在分布式场景下并不是这种点对点通讯的模式。 rpc要素:where how 地址:注册中心Config...
  • 如何使用HSF

    2015-10-24 11:35:15
    应用场景:B项目需要访问A项目的某些接口   一、A项目:   1.在pom.xml中添加hsf   &lt;dependency&gt; &lt;groupId&gt;com.taobao.hsf&lt;/groupId&gt; &lt;artifactId&...
  • HSF整合springboot使用记录

    千次阅读 2019-12-24 10:45:44
    整个框架demo分三层,服务层:hsf-server,接口层:hsf-api,消费层:hsf-web。 前期准备: 1、taobao-tomcat-7.0.59 2、taobao-hsf.sar:将其放入taobao-tomcat-7.0.59的deploy中 3、edas-lite-...
  • 阿里HSF(服务框架)

    2020-09-16 13:07:34
    HSF(服务框架) 简介 架构设计 Provider——服务提供者 Consumer——服务消费者 ConfigServer——配置服务器 Diamond——持久化配置中心 addressServer——地址服务 元数据存储 ...
  • 已有一个名称为HelloWorld的Spring Bean,此Bean实现的接口为com.taobao.hsf.test.HelloWorld,现需让其他功能模块能远程调用此Spring Bean; * 增加一个如下内容的Spring Bean XML: ...
  • HSF 调用异常

    千次阅读 2019-09-24 10:16:24
    HSF deserialization response failed on client side. If the Biz DO type is not fully compatible with hessian, service provider can change serialize type to "java" on HSFSpringProviderBean.com.dbxi...
  • hsf服务的调用过程

    万次阅读 2011-12-02 16:20:07
    写一个hsf服务并发布  写一个接口工程  写一个实现接口的实现工程  写一个发布接口工程和实现工程的服务工程  写一个应用实现借口 hsf服务调用的过程  通过JBoss/Tomcat启动服务  通过main口启动服务...
  • hsf能查看到服务,但是没办法调用

    千次阅读 2016-06-20 11:27:27
    hsf查看服务列表能查询到本地注册的服务,但是调用时报错如下: 从我目前遇到的情况看,发现如下两个原因: 1.本机登录账户对本机做了网络访问限制,导致报错 2.在家用vpn访问内网,也没办法访问本机服务,...
  • HSF微服务环境,浏览器前台请求后台接口接口无响应信息,约12s后,请求被Cancled。 最坑爹的是,并非所有数据都有该问题,一部分数据有,一部分数据正常,(由于这一批数据是通过脚本操作的,因此排查起来十分费劲...
  • idea 自带接口测试工具

    千次阅读 2018-02-06 15:04:00
    转载于:https://www.cnblogs.com/xiao-zh/p/8422441.html
  • 曾经不同系统间交互问题时,总是优先考虑webserivce,现在看到除了一些老牌的公司,比如 amazonk 对众的接口还是webservice的方 式,其他很多国内新项目的接口都开始转向直接传 JSON 的方式。我知道的优势之一,...
  • //调用业务接口 //file获取到的文件 //TenantExcel.class对应的实体类 int tenants = tenantService.readExcelFile( file , TenantExcel.class); System.out.println(tenants); return false; } 编写实现类 service...
  • RPC中间件-HSF

    千次阅读 2019-09-11 17:15:30
    针对淘宝RPC中间件-HSF,个人选择性的阅读了源码,并绘制流程图,以便清晰展示重要流程。
  • HSF原理简介

    2020-12-24 10:13:15
    0. 前言HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remote Procedure Call...
  • HSF简介

    2019-08-20 11:16:19
    阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称“好舒服”)已经被很多技术爱好者所熟知,目前已经支撑着近 2000 多个应用的运行。 其对应早期的开源项目 Dubbo(因为某些原因,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,372
精华内容 1,348
关键字:

hsf接口