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服务和客户端。你可以在应用程序中使用这些服务和客户端来实现远程过程调用,从而使应用程序更加灵活和高效。

相关内容

热门资讯

身份证校验规则-身份证号码背后... 大家好,今天咱们就来聊聊那个天天带着却很少仔细看的东西——身份证!是不是觉得它普普通通,没什么特别的...
无法定位数据459-数据丢失急... 哎呀,真是急死人了!今天一早,我就像往常一样打开电脑,准备处理一些重要的数据,结果你猜怎么着?屏幕上...
windows7 超级终端-W... 哎呀,说到Windows7的超级终端,那可是我青春的记忆啊!那时候,每天最期待的就是打开电脑,启动那...
易到用车司机注册拍照为何如此折... 哎呀,说到这个易到用车司机注册拍照,我真是满肚子火!你说说,做个司机容易吗?每天起早贪黑,风吹日晒的...
2024操作系统下载-2024... 哎呀,亲爱的朋友们,今天咱们得聊聊那让人心跳加速的话题——2024年最新操作系统的下载!这可不仅仅是...
freebsd java-在 ... 哎呀,说到在FreeBSD上搞Java,我这心情啊,真是五味杂陈!你知道吗,FreeBSD这货虽然稳...
删除的短信能恢复吗-短信突然消... 哎呀,讲到那些突然消失的短信,我的心就揪成一团!你有没有遇到过这样的情况:一条重要的短信,突然就不见...
上海优化推广公司:梦想的搬运工... 上海优化推广公司就像一束温暖的阳光,照亮了我们追逐梦想的道路。你知道吗?每一次我们点击搜索引擎,浏览...
电脑开机蓝屏怎么修复-电脑突然... 哎呀,真是气死我了!刚刚还在兴冲冲地刷剧呢,电脑突然就给我来个蓝屏,简直了!这蓝屏就像个不请自来的恶...
weblogicserver8... 说到WeblogicServer8.1,我这颗老程序员的心就忍不住激动起来!这小家伙,虽然有点年头了...
windows应用商店下载的东... 哎呀,你有没有遇到过这种情况?在Windows应用商店里兴冲冲地下载了个新应用,结果一转眼就找不着了...
北京阳痿治疗哪家医院好-北京治... 哎呀,说到这个“小弟弟”不给力的问题,真是让人头疼!在北京这个大城市里,找家靠谱的医院治疗阳痿,简直...
完美应用ubuntu-Ubun... 嘿,大家好!今天我要来聊聊那个让我每天开机都心情大好的操作系统——Ubuntu!说实话,以前我总是被...
shopnc 漏洞-ShopN... 大家好,我是一个普通的网站用户,今天我想和大家聊聊最近让我头疼不已的事情——ShopNC的漏洞问题。...
帝国cms后台登陆模板-帝国 ... 哎呀,说到这个帝国CMS的后台登陆模板,我可是有一肚子的话要说!每次打开那个登录页面,我就像是一个期...
安易数据恢复扫描不到文件-电脑... 哎呀,真是急死人了!电脑突然抽风,文件都不见了,想着用那个什么安易数据恢复软件救救急,结果它竟然告诉...
分区助手4k对齐后进不了系统-... 哎呀妈呀,今天真是倒霉透顶了!我这不,想着给电脑来个“大扫除”,用那个分区助手搞了个4k对齐,结果一...
lol不锁定视角怎么练-LOL... 哎呀,说到LOL不锁定视角,我可是有满肚子的苦水要倒!你知道吗,刚开始练的时候,我真的是两眼一抹黑,...
mapinfo 济阳地图-济阳... 嘿,朋友们,今天咱们聊聊那张特别的“济阳地图”,不是那种冷冰冰的地图,而是充满了我们回忆和情感的“地...
shopnc b2b2c 插件... 嘿,伙计们,今天咱们聊聊这个ShopNCB2B2C插件,这可不是一般的插件哦,它能让你的电商世界变得...