HSF的缺点是其要使用指定的JBoss等容器,还需要在JBoss等容器中加入sar包扩展,对用户运行环境的侵入性大,如果你要运行在Weblogic或Websphere等其它容器上,需要自行扩展容器以兼容HSF的ClassLoader加载。 taobao有类似的其他框架Dubbo,介绍见 http://www.iteye.com/magazines/103
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba.edas</groupId>
<artifactId>hsf-pandora-boot-provider</artifactId>
<version>1.0</version>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.1.6.RELEASE</spring-boot.version>
<pandora-boot.version>2019-06-stable</pandora-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>pandora-hsf-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.taobao.pandora</groupId>
<artifactId>taobao-hsf.sar</artifactId>
</dependency>
<!-- for unit test-->
<dependency>
<groupId>com.taobao.pandora</groupId>
<artifactId>pandora-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.taobao.pandora</groupId>
<artifactId>pandora-boot-starter-bom</artifactId>
<version>${pandora-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.taobao.pandora</groupId>
<artifactId>pandora-boot-maven-plugin</artifactId>
<version>2.1.11.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
/**
* 通过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;
}
通过在 Spring 配置文件中,配置一个 class 为 com.taobao.hsf.app.spring.util.HSFSpringProviderBean 的 bean,即可完成 HSF 服务的发布。
示例代码
<bean id="helloService" class="com.alibaba.edas.HelloServiceImpl" />
<bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
<!-- [必选] 设置 HSF 服务对外提供的业务接口 -->
<property name="serviceInterface" value="com.alibaba.edas.HelloService" />
<!-- [必选] 设置 serviceInterface 指定接口的服务实现对象,即需要发布为 HSF 服务的 spring bean id -->
<property name="target" ref="helloService" />
<!-- [可选] 设置服务的版本号,默认为 1.0.0 -->
<property name="serviceVersion" value="1.0.0" />
<!-- [可选] 设置服务的组别,默认为 HSF -->
<property name="serviceGroup" value="HSF" />
<!-- [可选] 设置服务的描述,从而方便管理,默认为 null -->
<property name="serviceDesc" value="HelloWorldService providered by HSF" />
<!-- [可选] 设置响应超时时间(单位:毫秒)。如果服务端在设置的时间内没有返回,则抛出 HSFTimeOutException -->
<!-- 默认为 3000 ms -->
<property name="clientTimeout" value="3000"/>
<!-- [可选] 设置服务中某些方法的响应超时时间。优先级高于上面的 clientTimeout -->
<!-- 通过设置 MethodSpecial.methodName 指定方法名,MethodSpecial.clientTimout 指定方法的超时时间 -->
<property name="methodSpecials">
<list>
<bean class="com.taobao.hsf.model.metadata.MethodSpecial">
<property name="methodName" value="sum" />
<property name="clientTimeout" value="2000" />
</bean>
</list>
</property>
<!-- [可选] 设置服务的请求参数和响应结果的序列化方式。可选值有:java,hessian,hessian2,json,kryo -->
<!-- 默认为 hessian2 -->
<property name="preferSerializeType" value="hessian2"/>
<!-- [可选] 配置服务单独的线程池,并指定最小活跃线程数量。若不设置该属性,则默认使用 HSF 服务端的公共线程池 -->
<property name="corePoolSize" value="10"/>
<!-- [可选] 配置服务单独的线程池,并指定最大活跃线程数量。若不设置该属性,则默认使用 HSF 服务端的公共线程池 -->
<property name="maxPoolSize" value="60"/>
</bean>
@HSFProvider(serviceInterface = HelloService.class, serviceVersion = "1.0.0")
public class HelloServiceImpl implements HelloService {
...
}
/**
* 通过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;
}
通过在 Spring 配置文件中,配置一个 class 为 com.taobao.hsf.app.api.util.HSFSpringConsumerBean 的 bean,即可实现服务的订阅。
示例代码
<bean id="helloService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean">
<!-- [必选] 设置需要订阅服务的接口名 -->
<property name="interfaceName" value="com.alibaba.edas.HelloService" />
<!-- [必选] 设置需要订阅服务的版本号 -->
<property name="version" value="1.0.0" />
<!-- [必选] 设置需要订阅服务的组别 -->
<property name="group" value="HSF" />
<!-- [可选] 设置请求超时时间(单位:毫秒)。如果客户端在设置的时间内没有收到服务端响应,则抛出 HSFTimeOutException -->
<!-- 若客户端设置了 clientTimeout,则优先级高于服务端设置的 clientTimeout。否则,在服务的远程调用过程中,使用服务端设置的 clientTimeout。-->
<property name="clientTimeout" value="3000" />
<!-- [可选] 设置服务中某些方法的请求超时时间,优先级高于当前客户端的 clientTimeout -->
<!-- 通过设置 MethodSpecial.methodName 指定方法名,通过设置 MethodSpecial.clientTimout 指定当前方法的超时时间 -->
<property name="methodSpecials">
<list>
<bean class="com.taobao.hsf.model.metadata.MethodSpecial">
<property name="methodName" value="sum" />
<property name="clientTimeout" value="2000" />
</bean>
</list>
</property>
<!-- [可选] 设置同步等待 ConfigServer 推送地址的时间(单位:毫秒)-->
<!-- 从而避免因地址还未推送到就发起服务调用造成的 HSFAddressNotFoundException。-->
<!-- 一般建议设置为 5000 毫秒,即可满足推送等待时间。 -->
<property name="maxWaitTimeForCsAddress" value="5000"/>
<!-- [可选] 设置需要异步调用的方法列表。List 中的每一个字符串的格式为:name: 方法名;type: 异步调用类型;listener: 监听器 -->
<!-- 其中,listener 只对 callback 类型的异步调用生效。type 的类型有:-->
<!-- future: 通过 Future 的方式去获取请求执行的结果 -->
<!-- callback: 当远程服务的调用完成后,HSF 会使用响应结果回调此处配置的 listener,该 listener 需要实现 HSFResponseCallback 接口 -->
<property name="asyncallMethods">
<list>
<value>name:sayHello;type:callback;listener:com.taobao.hsf.test.service.HelloWorldServiceCallbackHandler</value>
</list>
</property>
<!-- [可选] 设置服务的代理模式,一般不用配置。如果要拦截这个 consumer bean,需要配置成 javassist -->
<property name="proxyStyle" value="jdk" />
</bean>
@HSFConsumer(clientTimeout = 3000, serviceVersion = "1.0.0")
通过 VM options 配置启动参数 -Djmenv.tbsite.net={$IP},通过 main 方法直接启动。其中 {$IP}
为轻量配置中心的 IP 地址。列如本机启动轻量配置中心,则 {$IP}
为 127.0.0.1
。
您也可以不配置 JVM 的参数,而是直接通过修改 hosts 文件将 jmenv.tbsite.net
绑定为轻量配置中心的 IP。详情请参见启动轻量级配置及注册中心。
在工程的主目录下,执行 maven 命令 mvn clean package
进行打包,即可在 Target 目录下找到打包好的 FatJar 文件。
通过 Java 命令启动应用
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。