简介
服务器端,可以选用以下任意一种模型,将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服务
- 导出Hessian服务
@Bean
public HessianServiceExporter hessianServiceExporter(UserService service) {
HessianServiceExporter hessianServiceExporter = new HessianServiceExporter();
hessianServiceExporter.setService(service);
hessianServiceExporter.setServiceInterface(UserService.class);
return hessianServiceExporter;
}
- 配置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使用)
- 发布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服务
- 创建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";
}
}
- 发布服务
@Bean
public SimpleJaxWsServiceExporter simpleJaxWsServiceExporter() {
SimpleJaxWsServiceExporter simpleJaxWsServiceExporter = new SimpleJaxWsServiceExporter();
simpleJaxWsServiceExporter.setBaseAddress("http://localhost:8888/service");
s
return simpleJaxWsServiceExporter;
}
- 访问web服务
后续补充。。。