spring远程服务调用

简介

服务器端,可以选用以下任意一种模型,将spring管理的bean发布为远程服务。在spring中,远程服务纯粹是一个配置问题,不需要编写任何java代码即可支持远程服务。
在这里插入图片描述

使用RMI

  • spring创建RMI
@Bean
public RmiServiceExporter rmiServiceExporter(UserService service) {
    RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();
    rmiServiceExporter.setService(service);
    rmiServiceExporter.setServiceName("userService");
    rmiServiceExporter.setServiceInterface(UserService.class);
    rmiServiceExporter.setRegistryHost("rmi.service.com"); //服务器地址
    rmiServiceExporter.setRegistryPort(9999); //服务端口

    return rmiServiceExporter;
}
  • spring使用RMI
//代理类
@Bean
 public RmiProxyFactoryBean userService() {
     RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
     rmiProxyFactoryBean.setServiceUrl("rmi://localhost:端口/userService");
     rmiProxyFactoryBean.setServiceInterface(UserService.class);

     return rmiProxyFactoryBean;
 }

//至此可以使用@Autowired,自动注入
@Autowired
private UserService userService;

使用Hessian和Burlap发布远程服务

  • 发布Hessian服务
  1. 导出Hessian服务
@Bean
public HessianServiceExporter hessianServiceExporter(UserService service) {
    HessianServiceExporter hessianServiceExporter = new HessianServiceExporter();
    hessianServiceExporter.setService(service);
    hessianServiceExporter.setServiceInterface(UserService.class);

    return hessianServiceExporter;
}
  1. 配置Hessian控制器
  • 配置spring的DispatcherServlet
    方法1(其他方法省略):
DispatcherServlet dispatcherServlet = new DispatcherServlet();
ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", dispatcherServlet);

appServlet.setLoadOnStartup(1);
appServlet.addMapping("/");
appServlet.addMapping("*.service");
  • 配置URL与Hessian Bean映射关系。
@Bean
public HandlerMapping handlerMapping() {
   SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();

   Properties prop = new Properties();
   prop.setProperty("/user.service", "hessianServiceExporter");

   simpleUrlHandlerMapping.setMappings(prop);
   return simpleUrlHandlerMapping;
}
  • 发布Burlap服务
    配置方法与Hessian一模一样,只是Burlap使用BurlapServiceExporter而已。

  • 使用Hessian和Burlap服务

@Bean
public HessianProxyFactoryBean userService() {
    HessianProxyFactoryBean hessianProxyFactoryBean = new HessianProxyFactoryBean();
    hessianProxyFactoryBean.setServiceUrl("http://localhost:8080/UserService/user.service");
    hessianProxyFactoryBean.setServiceInterface(UserService.class);

    return hessianProxyFactoryBean;
}

@Bean
public BurlapProxyFactoryBean userService() {
    BurlapProxyFactoryBean burlapProxyFactoryBean = new BurlapProxyFactoryBean();
    burlapProxyFactoryBean.setServiceUrl("http://localhost:8080/User/user.service");
    burlapProxyFactoryBean.setServiceInterface(UserService.class);

    return burlapProxyFactoryBean;
}
  • 使用spring 的 HttpInvoker(只能spring使用)
  1. 发布HttpInvoker服务
@Bean
public HttpInvokerServiceExporter httpInvokerServiceExporter(UserService service) {
    HttpInvokerServiceExporter httpInvokerServiceExporter = new HttpInvokerServiceExporter();
    httpInvokerServiceExporter.setService(service);
    httpInvokerServiceExporter.setServiceInterface(UserService.class);

    return httpInvokerServiceExporter;
}

//配置controller
@Bean
public HandlerMapping handlerInvokerMapping() {
    SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();

    Properties prop = new Properties();
    prop.setProperty("/user.service", "httpInvokerServiceExporter");

    simpleUrlHandlerMapping.setMappings(prop);

    return simpleUrlHandlerMapping;
}
  • 访问服务
@Bean
public HttpInvokerProxyFactoryBean userService() {
    HttpInvokerProxyFactoryBean httpInvokerProxyFactoryBean = new HttpInvokerProxyFactoryBean();
    httpInvokerProxyFactoryBean.setServiceUrl("http://localhost:8080/User/user.service");
    httpInvokerProxyFactoryBean.setServiceInterface(UserService.class);
    
    return httpInvokerProxyFactoryBean;
}
  • SOA下的发布和访问web服务
  1. 创建web服务
@WebService //SpringBeanAutowiringSupport支持自动装配
public class WebFeignService extends SpringBeanAutowiringSupport {

   @WebMethod
   public String test() {
       return "hello world";
   }
}

@Component
@WebService(serviceName="userService")
public class WebFeignService {

    @WebMethod
    public String test() {
        return "hello world";
    }
}
  1. 发布服务
@Bean
public SimpleJaxWsServiceExporter simpleJaxWsServiceExporter() {
    SimpleJaxWsServiceExporter simpleJaxWsServiceExporter = new SimpleJaxWsServiceExporter();
    simpleJaxWsServiceExporter.setBaseAddress("http://localhost:8888/service");
    s
    return simpleJaxWsServiceExporter;
}
  • 访问web服务
    后续补充。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值