springboot实现Hessian协议的RPC服务
创始人
2024-05-31 18:43:21
0

背景

这段时间在公司接手了一个新项目,看到一段代码非常奇怪的,研究了好久。内容大概是这样

public void getUser (int id) {userService.getById(id);
}

当我点击这个方法进去的时候,我发现这个UserService类居然是导入jar包的一个接口,而且没有实现类。反编译过来的代码大概是这样

public Interface UserService {User getById(int id);
}

没有实现类,也没有类似于feign这种远程调用。我思考了很久,到底是怎样可以做到只用接口就实现功能了,首先想到的是mybatis的mapper类型接口,但是这种人家有@Mapper注解,能用切面之类的。如果是rpc或者微服务,怎么会没有远程调用地址?根据我使用过的框架feign、dubbo、restTemplate哪个没有远程调用地址?莫非是为了代码的保密性,将接口和实现类分开打Jar包了?摸索了半天,什么都没发现。
后来我看到一个很奇怪的名词:Hessian,百度了解之后,得知这玩意就是rpc框架。。。而且使用的方式有很大不一样,就学习了一下。所谓的只有接口没有实现类和feign调用的那种方式差不多,由服务提供者来提供一个jar包,里面全是接口和一些vo类。

Hessian入门学习

Hessian协议是一种轻量级的RPC协议,可以用于高效地实现跨语言的服务调用。在本文中,我们将介绍如何使用Spring Boot实现基于Hessian协议的RPC服务。

1. 添加Hessian依赖

在开始之前,我们需要在Spring Boot项目中添加Hessian依赖。可以在pom.xml文件中添加以下依赖:

com.cauchohessian4.0.38

2. 创建RPC接口

创建一个接口,包含需要远程调用的方法。例如,创建一个名为UserService的接口,包含getUserById()方法:

public interface UserService {User getUserById(int userId);
}

3. 实现RPC接口

创建一个UserService的实现类,并在其中实现getUserById()方法。例如:

@Service
public class UserServiceImpl implements UserService {@Overridepublic User getUserById(int userId) {// 实现获取用户信息的逻辑return userDao.getUserById(userId);}
}

4. 配置Hessian服务端

在Spring Boot应用程序的配置类中,使用HessianServiceExporter将UserService实现类暴露为Hessian服务端。例如:

@Configuration
public class HessianConfig {@Autowiredprivate UserService userService;@Bean(name = "/userService")public HessianServiceExporter hessianServiceExporter() {HessianServiceExporter exporter = new HessianServiceExporter();exporter.setService(userService);exporter.setServiceInterface(UserService.class);return exporter;}
}

在上面的配置中,使用@Bean注解将HessianServiceExporter实例化为Spring Bean,并使用/setService()和/setServiceInterface()方法将UserService实现类暴露为Hessian服务端。

5. 测试Hessian服务端

启动Spring Boot应用程序,并访问http://localhost:8080/userService。如果一切正常,应该会看到Hessian服务端的欢迎信息。

6. 创建RPC客户端

创建一个名为UserServiceClient的接口,并在其中定义远程调用getUserById()方法。例如:

public interface UserServiceClient {User getUserById(int userId);
}

7. 配置Hessian客户端

在Spring Boot应用程序的配置类中,创建一个HessianProxyFactoryBean实例,并使用/setServiceUrl()和/setServiceInterface()方法将UserServiceClient接口绑定到Hessian服务端。例如:

@Configuration
public class HessianConfig {// 配置Hessian服务端@Autowiredprivate UserService userService;@Bean(name = "/userService")public HessianServiceExporter hessianServiceExporter() {HessianServiceExporter exporter = new HessianServiceExporter();exporter.setService(userService);exporter.setServiceInterface(UserService.class);return exporter;}// 配置Hessian客户端@Beanpublic HessianProxyFactoryBean userServiceClient() {HessianProxyFactoryBean factory = new HessianProxyFactoryBean();factory.setServiceUrl("http://localhost:8080/userService");factory.setServiceInterface(UserServiceClient.class);return factory;}
}

在上面的配置中,使用@Bean注解将HessianProxyFactoryBean实例化为Spring Bean,并使用/setServiceUrl()和/setServiceInterface()方法将UserServiceClient接口绑定到Hessian服务端。

8. 测试Hessian客户端

在需要调用UserService的代码中,使用@Autowired注解将UserServiceClient实例化为Spring Bean。例如:

@Service
public class UserServiceCaller {@Autowiredprivate UserServiceClient userServiceClient;public User getUserById(int userId) {return userServiceClient.getUserById(userId);}
}

在上面的代码中,使用@Autowired注解将UserServiceClient实例化为Spring Bean,并调用getUserById()方法以远程调用Hessian服务端。

9. 完成

现在已经成功地使用Spring Boot实现了基于Hessian协议的RPC服务和客户端。你可以在应用程序中使用这些服务和客户端来实现远程过程调用,从而使应用程序更加灵活和高效。

相关内容

热门资讯

安卓u盘系统盘,便携式移动办公... 你有没有想过,你的安卓手机或者平板,如果有一天突然变成了一个超级电脑,那会是怎样的场景呢?其实,这并...
安卓系统如何给软件授权,安卓系... 你有没有想过,你的安卓手机里那些可爱的应用是怎么被允许在你的设备上畅行无阻的呢?没错,这就是今天我们...
安卓app调用系统指纹,安全便... 你知道吗?现在智能手机的功能越来越强大,各种APP也是层出不穷。但是,你知道吗?有些APP竟然可以调...
华为会被禁安卓系统吗,未来走向... 最近关于华为的一个大话题在互联网上可是闹得沸沸扬扬呢!那就是——华为会不会被禁用安卓系统?这个问题牵...
zepeto安卓系统打不开,原... 最近是不是有不少小伙伴在用Zepeto这款超有趣的虚拟形象制作软件呢?不过,有些小伙伴在使用过程中遇...
安卓系统转到苹果手,系统转换全... 你有没有想过,从安卓系统转到苹果手机,这不仅仅是一次换手机那么简单,它更像是一场跨越世界的冒险之旅!...
安卓系统如何在系统内关机重启,... 手机用久了是不是感觉有点卡?别急,今天就来教你怎么给安卓手机来个彻底的“大保健”——关机重启!这不仅...
安卓手机怎么实现双系统,安卓手... 你有没有想过,一台安卓手机,竟然可以同时运行两个操作系统?没错,就是那种一个手机,两个世界的感觉!今...
安卓系统称重软件,便捷健康管理... 你有没有想过,每天早上起床后,第一件事就是站在体重秤上,看看自己又重了多少?这可是个让人又爱又恨的小...
wince系统如何与安卓共存,... 你有没有想过,你的手机里竟然可以同时运行两个完全不同的操作系统?没错,就是Wince系统和安卓系统!...
安卓系统微信替身,安卓系统下的... 你知道吗?在咱们这个手机不离手的年代,微信可是咱们日常生活中不可或缺的好伙伴。但是,你知道吗?现在竟...
小米手表是安卓系统吗,安卓系统... 你有没有想过,当你手腕上那款时尚的小米手表在跳动时,它的内心世界是怎样的呢?今天,就让我带你一探究竟...
奇骏连接安卓系统手机,畅享智能... 你有没有想过,你的手机和汽车之间也能来个亲密接触呢?没错,就是那种让你的手机和汽车无缝连接的感觉。今...
安卓9.0以上系统吗 你有没有发现,最近你的手机是不是变得越来越聪明了?没错,这就是安卓9.0以上系统带来的魔力!今天,就...
微信安装需要安卓系统,安卓系统... 你有没有想过,为什么你的手机里要装那么多APP?其中,微信可是占据了重要位置。不过,你知道吗?微信安...
安卓打开软件定位系统,畅享便捷... 你有没有发现,现在手机里的软件越来越智能了?它们不仅能帮你找路,还能知道你在哪里。今天,就让我来给你...
王者怎么苹果换安卓系统,轻松切... 你有没有想过,把你的苹果手机换成安卓系统,体验一下不一样的世界呢?这可不是一件小事,毕竟手机可是我们...
安卓系统软件之间切换,体验流畅... 你有没有遇到过这种情况?手机里装了各种各样的安卓系统软件,有时候想切换却发现操作起来有点头疼。别急,...
一加6安卓系统下载,安卓系统下... 你有没有听说最近一加6的安卓系统下载又更新了?这可是个大新闻呢!想象你的手机就像是一辆赛车,而安卓系...
2寸安卓系统吗 你有没有听说过2寸安卓系统?是不是觉得这个名字有点奇怪,有点像是在开玩笑?别急,今天我就要带你深入了...