zl程序教程

您现在的位置是:首页 >  后端

当前栏目

使用Spring框架实现远程服务暴露与调用

Spring服务框架 实现 使用 远程 调用 暴露
2023-06-13 09:13:33 时间
一、前言

Spring框架提供了通过HTTP协议实现远程调用的方式,具体是调用方使用HttpInvokerProxyFactoryBean生成一个代理对象,通过代理对象远程通过http服务调用服务提供方法的服务,服务提供方则通过HttpInvokerServiceExporter在服务端暴漏远程调用接口。

二、远程服务暴露 2.1 简单使用 第一步需要定义需要暴露的服务接口和实现
public interface UserServiceBo {

 String sayHello(String name); 

 String sayHello2(String name); 

 String testPojo(Person person);

public class UserServiceImpl implements UserServiceBo{

 @Override

 public String sayHello(String name) {

 return name; 

 @Override

 public String sayHello2(String name) {

 return name;

 @Override

 public String testPojo(Person person) {

 return JSON.toJSONString(person);

第二步创建服务导出HttpInvokerServiceExporter的实例
 bean id="userService" / 

 bean name="useServiceExporter" 

 property name="service" ref="userService" / 

 property name="serviceInterface" value="com.test.UserServiceBo" / 

 /bean 

第三步 暴露远程服务的URL
 bean id="simpleUrlRequestHandler"

 property name="alwaysUseFullPath" value="true" / 

 property name="urlMap" 

 map 

 entry key="/remote/test/userService" value-ref="useServiceExporter" / 

 /map 

 /property 

 /bean 

注意这个bean要配置到dispatcher类的配置文件里面。

2.2 原理
使用Spring框架实现远程服务暴露与调用 image.png 三、远程服务调用 3.1 简单使用
 HttpInvokerProxyFactoryBean factoryBean = new HttpInvokerProxyFactoryBean();

 factoryBean.setServiceUrl("http://127.0.0.1:7001/test/userService.do");

 factoryBean.setServiceInterface(UserServiceBo.class);

 factoryBean.afterPropertiesSet();

 UserServiceBo userService = (UserServiceBo) factoryBean.getObject();

 System.out.println(userService.sayHello("jiaduo"));

3.2 原理
使用Spring框架实现远程服务暴露与调用 image.png

Spring框架提供了通过HTTP协议实现远程调用的方式,我们可以通过重写invoker自定义http请求header和body传递一些信息到服务暴露端,比如函数签名,序列化协议等。

通过重写exporter可以进行鉴权操作,比如进行函数签名校验,并可以定制反序列化方式。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/93857.html

aliyun