hsf概念
hsf(High-speed Service Framework),高速服务框架,是分布式rpc服务框架
调用方式-同步调用
hsf客户端默认以同步调用的方式消费服务,客户端代码需要同步等待返回结果
调用方式-异步调用
对于服务调用的客户端来说,并不是所有的HSF服务都需要同步等待返回结果的,对于这些服务,HSF 提供异步调用的形式,让客户端不必同步阻塞在 HSF 调用操作上。HSF 的异步调用
Future 调用:客户端在需要获取调用的返回结果时,通过
HSFResponseFuture.getResponse(int timeout)
主动获取结果Callback 调用:Callback 调用利用 HSF 内部提供的回调机制,当指定的 HSF 服务消费完毕拿到返回结果时,HSF 框架会回调用户实现的
HSFResponseCallback
接口,客户端通过回调通知的方式获取结果
服务
“服务”开始于接口的定义,我们首先需要根据业务逻辑定义好服务的接口
在日常开发中,一般会将服务的接口定义在一个工程中,它会被打成一个 jar 包,发布到 maven 仓库中。服务端实现 jar 包中的接口,通过 HSF 发布对应的服务;而消费端通过依赖这个 jar 包,透过 HSF 远程调用消费到服务端的接口实现。
定义服务接口【在hsf-guide-api下】
public interface HelloWorldService {
/**
* 根据参数中指定的名字,生成问候语
*
* @param name 被问候的姓名
* @return 问候语
*/
String sayHi(String name);
}
发布服务接口
mvn clean package 将 hsf-guide-api 这个服务接口工程打包成 hsf-guide-api-1.0.0-SNAPSHOT.jar
mvn clean deploy 命令将服务的接口 jar 发布到 maven 仓库后,我们可以通过 maven 坐标依赖服务的接口
<dependency>
<groupId>com.alibaba.middleware</groupId>
<artifactId>hsf-guide-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
实现服务接-将服务 HelloWorldService
的实现类 HelloWorldServiceImpl
放在 hsf-guide-biz工程中
public class HelloWorldServiceImpl implements HelloWorldService {
@Override
public String sayHi(String name) {
if (name == null || name.length() == 0) {
return null;
}
return "Hi, " + name + "! Welcome to the HSF world.";
}
}
至此,我们的服务提供方实现代码就编写完成了,并且还没有涉及到 HSF。这是因为,我们希望你的服务接口(API)和业务实现可以足够的干净,只有这样一个依赖精简的本地服务才能够更加安全可靠的转换成为一个分布式服务。
发布hsf服务
根据服务接口定义 HelloWorldService
完成本地服务 HelloWorldServiceImpl
的实现后,我们只需要将这个服务通过 HSF 发布出去,就可以让其他 HSF 客户端通过远程调用消费到当前机器的服务了。
我们将发布 HSF 服务的代码,放在 hsf-guide-server-normal
工程中,并作为 HSF 服务提供方的启动入口。