Hession RPC 远程调用-01-入门例子
2022年5月10日大约 2 分钟
Hession
Hession 二进制 Web 服务协议使 Web 服务无需大型框架即可使用,并且无需学习另一种协议字母汤。
因为它是一个二进制协议,所以它非常适合发送二进制数据,而无需通过附件扩展协议。
服务端
基本环境
jdk1.8
pom.xml
spring-boot 2.0.9.RELEASE
hessian 4.0.60
4.0.0
com.github.houbb
hession-hello-server
1.0-SNAPSHOT
2.0.9.RELEASE
org.springframework.boot
spring-boot-starter-web
${spring-boot.version}
org.springframework.boot
spring-boot-starter-test
${spring-boot.version}
com.caucho
hessian
4.0.60
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
服务类
定义接口:
public interface UserServiceFacade {
UserDto queryUser(String userId);
}
其中 UserDto 如下:
public class UserDto implements Serializable {
private String id;
private String name;
//getter setter toString
}
ps: 注意这里需要实现序列化接口。
实现也很简单:
@Service
public class UserServiceFacadeImpl implements UserServiceFacade {
public UserDto queryUser(String userId) {
UserDto userDto = new UserDto();
userDto.setId(userId);
userDto.setName("N-"+userId);
return userDto;
}
}
服务暴露
@Configuration
public class HessionServerConfig {
@Autowired
private UserServiceFacade userServiceFacade;
@Bean("/userService")
public HessianServiceExporter userService() {
HessianServiceExporter exporter = new HessianServiceExporter();
exporter.setService(userServiceFacade);
exporter.setServiceInterface(UserServiceFacade.class);
return exporter;
}
}
应用启动
@SpringBootApplication
public class Application {
public static void main(String args[]) {
SpringApplication.run(Application.class, args);
}
}
客户端
pom.xml
多了一个对于服务端 api 基础 facade 信息的依赖。(例子中混在一起的,实际生产应该拆分开)
4.0.0
com.github.houbb
hession-hello-client
1.0-SNAPSHOT
2.0.9.RELEASE
org.springframework.boot
spring-boot-starter-web
${spring-boot.version}
org.springframework.boot
spring-boot-starter-test
${spring-boot.version}
com.caucho
hessian
4.0.60
com.github.houbb
hession-hello-server
1.0-SNAPSHOT
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
引用服务
@Configuration
public class HessionClientConfig {
@Bean
public HessianProxyFactoryBean userService() {
HessianProxyFactoryBean factoryBean = new HessianProxyFactoryBean();
factoryBean.setServiceUrl("http://localhost:8080/userService");
factoryBean.setServiceInterface(UserServiceFacade.class);
return factoryBean;
}
}
启动
@SpringBootApplication
public class Application {
public static void main(String args[]) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
// 調用
UserServiceFacade userServiceFacade = context.getBean(UserServiceFacade.class);
UserDto userDto = userServiceFacade.queryUser("11");
System.out.println(userDto);
}
}
日志:
UserDto{id='11', name='N-11'}
参考资料
贡献者
binbin.hou