# hsf-pandora-boot-sample **Repository Path**: toutoukeji_admin/hsf-pandora-boot-sample ## Basic Information - **Project Name**: hsf-pandora-boot-sample - **Description**: 使用 Pandora Boot 开发 HSF 应用 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 2 - **Created**: 2019-11-22 - **Last Updated**: 2021-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hsf-pandora-boot-sample - 时间:2019-11-22 ## 1. HSF缺点 HSF的缺点是其要使用指定的JBoss等容器,还需要在JBoss等容器中加入sar包扩展,对用户运行环境的侵入性大,如果你要运行在Weblogic或Websphere等其它容器上,需要自行扩展容器以兼容HSF的ClassLoader加载。 taobao有类似的其他框架Dubbo,介绍见 http://www.iteye.com/magazines/103 ## 2. Dubbo和淘宝HSF相比 1. **Dubbo比HSF的部署方式更轻量**,HSF要求使用指定的JBoss等容器,还需要在JBoss等容器中加入sar包扩展,对用户运行环境的侵入性大,如果你要运行在Weblogic或Websphere等其它容器上,需要自行扩展容器以兼容HSF的ClassLoader加载,而Dubbo没有任何要求,可运行在任何Java环境中。 2. **Dubbo比HSF的扩展性更好,很方便二次开发**,一个框架不可能覆盖所有需求,Dubbo始终保持平等对待第三方理念,即所有功能,都可以在不修改Dubbo原生代码的情况下,在外围扩展,包括Dubbo自己内置的功能,也和第三方一样,是通过扩展的方式实现的,而HSF如果你要加功能或替换某部分实现是很困难的,比如支付宝和淘宝用的就是不同的HSF分支,因为加功能时改了核心代码,不得不拷一个分支单独发展,HSF现阶段就算开源出来,也很难复用,除非对架构重写。 3. **HSF依赖比较多内部系统**,比如配置中心,通知中心,监控中心,单点登录等等,如果要开源还需要做很多剥离工作,而Dubbo为每个系统的集成都留出了扩展点,并已梳理干清所有依赖,同时为开源社区提供了替代方案,用户可以直接使用。 4. **Dubbo比HSF的功能更多**,除了ClassLoader隔离,Dubbo基本上是HSF的超集,Dubbo也支持更多协议,更多注册中心的集成,以适应更多的网站架构。[![Top](https://www.iteye.com/images/wiki/top.gif?1448702469)](https://www.iteye.com/magazines/103#top) ## 3. HSF配置 ### 3.1 引入需要的依赖 ```xml 4.0.0 com.alibaba.edas hsf-pandora-boot-provider 1.0 1.8 2.1.6.RELEASE 2019-06-stable com.alibaba.boot pandora-hsf-spring-boot-starter org.springframework.boot spring-boot-starter-web com.taobao.pandora taobao-hsf.sar com.taobao.pandora pandora-boot-test test org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import com.taobao.pandora pandora-boot-starter-bom ${pandora-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin 3.7.0 1.8 1.8 com.taobao.pandora pandora-boot-maven-plugin 2.1.11.8 package repackage ``` ### 3.2 配置provider #### 3.2.1 通过Api编程的方式配置 ```java /** * 通过Api编程的方式配置 * @param helloService * @return * @throws Exception */ @Bean(name = "helloServiceProvider") public HSFApiProviderBean helloServiceImpl(HelloService helloService) throws Exception { /* 实例化并配置 Provider Bean*/ HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean(); hsfApiProviderBean.setServiceInterface("com.alibaba.edas.HelloService"); hsfApiProviderBean.setTarget(helloService); // target 为 serviceInterface 指定接口的实现对象 hsfApiProviderBean.setServiceVersion("1.0.0"); hsfApiProviderBean.setServiceGroup("HSF"); // 初始化 Provider Bean,发布服务 hsfApiProviderBean.init(); return hsfApiProviderBean; } ``` #### 3.2.2 Spring 配置方式 通过在 Spring 配置文件中,配置一个 class 为 com.taobao.hsf.app.spring.util.HSFSpringProviderBean 的 bean,即可完成 HSF 服务的发布。 示例代码 ``` ``` #### 3.2.3 通过注解 ```java @HSFProvider(serviceInterface = HelloService.class, serviceVersion = "1.0.0") public class HelloServiceImpl implements HelloService { ... } ``` ### 3.3 配置customer #### 3.3.1 通过Api编程的方式配置 ```java /** * 通过Api编程的方式配置 * @param helloService * @return * @throws Exception */ @Bean(name = "helloService") public HelloService helloService() throws Exception { // 实例化并配置 Consumer Bean HSFApiConsumerBean hsfApiConsumerBean = new HSFApiConsumerBean(); hsfApiConsumerBean.setInterfaceName("com.alibaba.edas.HelloService"); hsfApiConsumerBean.setVersion("1.0.0"); hsfApiConsumerBean.setGroup("HSF"); // 初始化 Consumer Bean,订阅服务 // true 表示等待地址推送(超时时间为 3000 毫秒),默认为 false(异步) hsfApiConsumerBean.init(true); // 获取 HSF 代理 HelloService helloService = (HelloService) hsfApiConsumerBean.getObject(); return helloService; } ``` #### 3.3.2 Spring 配置方式 通过在 Spring 配置文件中,配置一个 class 为 com.taobao.hsf.app.api.util.HSFSpringConsumerBean 的 bean,即可实现服务的订阅。 示例代码 ``` name:sayHello;type:callback;listener:com.taobao.hsf.test.service.HelloWorldServiceCallbackHandler ``` #### 3.3.3 通过注解 ```java @HSFConsumer(clientTimeout = 3000, serviceVersion = "1.0.0") ``` ## 4. HSF部署 #### 4.1 使用 Pandora Boot 开发应用 ##### 4.1.1 配置 EDAS 的私服地址和轻量配置中心 - [在 Maven 中配置 EDAS 的私服地址](https://help.aliyun.com/knowledge_detail/66643.html?spm=a2c4g.11186623.6.594.45a36302BNXt9S) - [启动轻量级配置及注册中心](https://help.aliyun.com/document_detail/142182.html#task-2310117) #### 4.2 在IDE中启动 通过 VM options 配置启动参数 -Djmenv.tbsite.net={$IP},通过 main 方法直接启动。其中 `{$IP}` 为轻量配置中心的 IP 地址。列如本机启动轻量配置中心,则 `{$IP}` 为 `127.0.0.1`。 您也可以不配置 JVM 的参数,而是直接通过修改 hosts 文件将 `jmenv.tbsite.net` 绑定为轻量配置中心的 IP。详情请参见[启动轻量级配置及注册中心](https://help.aliyun.com/document_detail/44163.html#task-2310117)。 #### 4.3 通过 FatJar 启动 1. 在工程的主目录下,执行 maven 命令 `mvn clean package` 进行打包,即可在 Target 目录下找到打包好的 FatJar 文件。 2. 通过 Java 命令启动应用 ```cmd java -Djmenv.tbsite.net=127.0.0.1 -Dpandora.location=${M2_HOME}/.m2/repository/com/taobao/pandora/taobao-hsf.sar/2019-06-stable/taobao-hsf.sar-2019-06-stable.jar -jar hsf-pandora-boot-provider-1.0.jar ``` ## 5. 参考文档 1. [阿里云HSF-Api手册](https://help.aliyun.com/document_detail/140490.html?spm=a2c4g.11186623.6.607.6fa21aafnDOkEl#title-a4b-o2n-cny) 2. [EDAS开发指南pdf](https://gitee.com/toutoukeji_admin/codes/0iocmsjy5wrf6pkne2vqh90#0-tsina-1-78717-397232819ff9a47a7b7e80a40613cfe1)