springboot整合rpc远程调用_Spingboot集成RPC框架Hessian实现远程调用服务

我是一个java开发者,我的文章都是工作中用到的解决方案,很多都是直接粘贴的源码,如果觉得有用可以收藏一下,希望有一天能用的上,我就很开心了。如果喜欢这里文章可以关注我,我会继续发的,谢谢你。

有这么一个使用场景,假如我们有多个模块都是一个单独的项目,不同模块有部署在不同的服务器上,相对都是一个个独立的块。那么我们如果从一个模块调用另一个模块该怎么办呢、有人说可以使用httpClient,得到JSON数据在处理,此办法可以的,但是过程中你要处理很多数据,比如解析JSON等。相对而言,hessian也是轻量级的 webService服务,好处是不需要关心过程,调用时就像调用本地一样,毕竟是RMI,httpClient的话,需要自己做好对象的解析。下面介绍如何在springboot中集成Hessian实现远程调用。

1、需要注意的地方

  1. Hessian有服务端和客户端之分,服务端提供接口,客户端来调用
  2. 服务端和客户端有相同部分的代码,比如你想在服务器端返回一个USER对象,这个user对象的实体也要在客户端有。一般做法是把通用的部分打成jar包,服务端和客户端都引用它。打包和上传教程:https://vsalw.com/1775.html (也可以直接把公共部分安装到本地仓库,mvn clean install)然后服务端和客户端直接引用,引用的是jar包。
  3. 服务端和客户端都要引入Hessian的依赖

2、第一步新建一个spingboot项目,添加hessian的依赖

com.caucho

hessian

4.0.38

3、服务端公共部分:此处比较简单只有一个接口和接口的实现类

//接口public interface DemoService {

public String getName(String name);

}//接口的实现类/@Service("HelloWorldService")

public class DemoServiceImpl implements DemoService {

@Override

public String getName(String name) {

return "欢迎你:" + name;

}

}

4、服务端配置(此处配置在启动类了,也可以单独写一个配置类)

@SpringBootApplication

public class DemoApplication {

@Autowired

private DemoService helloWorldService;

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

@Bean(name = "/HelloWorldService")

public HessianServiceExporter accountService() {

HessianServiceExporter exporter = new HessianServiceExporter();

exporter.setService(helloWorldService);

exporter.setServiceInterface(DemoService.class);

return exporter;

}

}

到此,服务端已经结束 ,下面看客户端。

5、客户端:新建一个springboot项目,同样添加Hessian的依赖,此处省略依赖,上面有。

6、引入和服务端公共的部分,就是一个接口,如果返回对象,也需要加上和服务端的实体类,

public interface DemoService {

public String getName(String name);

}

7、客户端配置类,主要是配置服务端的信息,地址,端口之类的

@SpringBootApplication

public class DemoApplication {public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

@Bean

public HessianProxyFactoryBean helloClient() {

HessianProxyFactoryBean factory = new HessianProxyFactoryBean();

factory.setServiceUrl("http://localhost:8090/HelloWorldService");

factory.setServiceInterface(DemoService.class);

return factory;

}

}

8、配置好Bean后,就该怎么使用了,写一个常用的controller,自动装载刚刚配置的Bean,

@RestController

public class TestController {

@Autowired

private DemoService helloWorldService;

@RequestMapping("/test")

public String test() {

return helloWorldService.getName("老王");

}

}

就这样,客户端就可以正常调用服务端了,可以直接返回对象的,无需关心中间序列化等过程。

1afe0915e86812e1ab37100d9c1fb170.png
7f9cd85bee6dd2917914ddb666685964.png
d29d7a09faadf73a96370eaff9264dfd.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值