Spring httpinvoker入门教程

ゞ 浴缸里的玫瑰 2023-01-21 05:27 76阅读 0赞

httpinvoker

参考:Spring 实现远程访问详解——httpinvoker

Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。

远程访问流程如下

1. 服务端定义服务接口

  1. package com.lm.core.service;
  2. import java.util.List;
  3. import com.lm.core.entity.User;
  4. public interface UserHttpService {
  5. List<User> getUserByAcount(String name,String password);
  6. void insert(User user);
  7. }

2. 服务端实现服务接口

  1. package com.lm.core.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import com.lm.core.entity.User;
  6. import com.lm.core.mapper.UserMapper;
  7. import com.lm.core.service.UserHttpService;
  8. import com.lm.core.service.UserRmiService;
  9. public class UserHttpServiceImpl implements UserHttpService {
  10. @Autowired
  11. private UserMapper userMapper;
  12. @Override
  13. public List<User>getUserByAcount(String name, String password) {
  14. System.err.println("httpInvoker获取用户信息:"+ name + password);
  15. return new ArrayList<User>();
  16. }
  17. @Override
  18. public void insert(User user) {
  19. System.err.println("httpInvoker开始插入用户信息:"+ user.toString());
  20. }
  21. }

3. 暴露服务对象

  1. <!-- 也可以在java类里用注解定义这个bean -->
  2. <bean name="userHttpService"class="com.lm.core.service.impl.UserHttpServiceImpl"/>
  3. <!-- 这个name实际上是作为外部访问此服务对象的路径的一部分 -->
  4. <bean name="userExporter" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
  5. <property name="service" ref="userHttpService"/>
  6. <property name="serviceInterface" value="com.lm.core.service.UserHttpService"/>
  7. </bean>

拿区块星空 tradeplatform.admin 来说,它把这些定义都放在 application-remote.xml 文件里:

  1. <bean name="/sysUserRemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
  2. <property name="service" ref="sysUserRemoteService" />
  3. <property name="serviceInterface" value="com.tradeplatform.admin.api.user.remote.UserRemoteService" />
  4. </bean>

而这个文件由在 web.xml 文件里定义的一个 servlet 负责加载,servlet 定义的拦截模式是 /remote/*,只有匹配这个路径的,才会进入到这个配置文件里找服务对象。假如这个项目部署到服务器的访问路径是 http://localhost:8100/admin ,那客户端要访问到这个服务对象,路径应该配置为 http://localhost:8100/admin/remote/sysUserRemoteService 。

4. 客户端定义暴露的服务端接口

  1. package com.lm.core.service;
  2. import java.util.List;
  3. import com.lm.core.entity.User;
  4. public interface UserHttpService {
  5. List<User> getUserByAcount(Stringname,String password);
  6. void insert(User user);
  7. }

因为区块星空里客户端pom文件引用了服务端项目,所以可以在本项目直接引用服务端代码,不需要再手动定义接口。

5. 客户端配置服务参数

  1. <bean id="httpInvokerProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
  2. <!-- 访问服务端接口的完整路径 -->
  3. <property name="serviceUrl" value="http://127.0.0.1:8080/spring_remote_server/remoting/userExporter"/>
  4. <property name="serviceInterface" value="com.lm.core.service.UserHttpService"/>
  5. </bean>

6. 客户端调用服务接口

  1. @RequestMapping(value = "/httpInvokerTest")
  2. @ResponseBody
  3. public BaseMapVo httpInvokerTest(String name, String password) {
  4. BaseMapVo vo = new BaseMapVo();
  5. long startDate = Calendar.getInstance().getTimeInMillis();
  6. System.out.println("httpInvoker客户端开始调用" + startDate);
  7. // 客户端的HTTP调用代理对象可以强制转换为服务接口对象,其余的就和调用本地服务对象方法没什么区别了
  8. UserHttpService rmi = (UserHttpService) ApplicationContextUtil.getInstance().getBean("httpInvokerProxy");
  9. rmi.getUserByAcount("张三", ":张三的密码");
  10. System.out.println("httpInvoker客户端调用结束" + (Calendar.getInstance().getTimeInMillis()-startDate));
  11. vo.setRslt("sucess");
  12. return vo;
  13. }
  • HttpInvoker运作原理;
  • java几种远程服务调用协议的比较,据说netty更好;
  • spring-remoting入门(http-invoker,hessian,burlap),包含工程自动发布接口;
  • Spring中HttpInvoker远程方法调用总结

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring 框架——spring入门教程

    打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!! 一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感