当前位置:

springrain云原生微服务实现

springrain是spring/springboot的开发范例,基于K8S + Istio 实现云原生微服务。springrain自带代码生成器,能够生成对表的增删改查的逻辑代码。springrain是标准Maven项目,只依赖springboot,没有hibernate,struts,iba
  • 大小:
    8.56MB
  • 演示网站:
    暂无
  • 当前版本:
    暂无
  • 日期:
    2024-11-15 03:19:00
  • 相关链接:
    Home Page
  • 所属分类:
    web应用开发 Java
  • 软件评级:

  • 下载人气:
    479
免费下载
源码属性
授权 开源
大小 8.56MB
语言 Java

springrain是spring/springboot的开发范例,基于K8S + Istio 实现云原生微服务。springrain自带代码生成器,能够生成对表的增删改查的逻辑代码。springrain是标准Maven项目,只依赖springboot,没有hibernate,struts,ibatis,数据库调优可以使用druid输出慢sql,比分析xml中的语句更直观,springrain所有的sql语句都使用Finder封装管理,只要查看Finder的引用即可。

 

微服务

入口项目是springrain-system-web,基于K8S

Istio 实现云原生微服务,正在整理文档。

 

实现了什么?

1、不增加学习成本,像单体一样开发分布式微服务。

2、不修改业务代码,可以实现单体,分层,微服务多种部署模式切换。

3、集成seata分布式事务实现。

4、子项目module的前后端可以独立运行,也可以被无感知集成,实现前后端按需打包。

 

实现思路

1、启动加载springbean时,先检查本地是否有实现,如果没有就启动GRPC远程调用。开发人员无感知。

2、基于seata分布式事务实现,支持有注解和无注解(开发人员无感知,理论上有不同步风险,个人感觉做好日志,风险不大)混合使用。

3、基于K8S的Service实现服务注册和发现,ConfigMap实现配置中心。开发人员无感知。

4、基于Istio实现微服务的发现,监控,熔断,限流。开发人员无感知。

 

限制

1、接口和实现的命名强制规范。

2、一个RPC接口只能有一个实现。

3、分布式事务,一定要避免A服务update表t,RPC调用B服务,B服务也update表t。这样A等待B结果,B等待A释放锁,造成死锁。

4、分布式无注解比较方便,理论上有不同步风险,个人感觉做好日志,风险不大

5、Service层不可以使用Servlet API,例如 HttpRequest

6、建议每个前后端module/子项目,都有各自的前缀,方便nginx根据路径解析

7、如果module依赖包的特定版本(例如netty,Grpc)和根项目版本冲突,module不能无感知集成,暂时只能独立运行

 

测试用例

//就极简而言,一个数据库只需要一个Service,就可以管理这个数据库的任意一张表 
//@Test  查询基本类型
public void testObject() throws Exception{
       // Finder finder=new Finder("select id from t_user where 1=1 ");
        Finder finder=Finder.getSelectFinder(User.class,"id").append(" WHERE 1=1 "); 
         finder.append("and id=:userId ").setParam("userId", "admin");
        String id = baseDemoService.queryForObject(finder, String.class);
        System.out.println(id);

}

//@Test 查询一个对象
public void testObjectUser() throws Exception{
        //Finder finder=new Finder("select * from t_user where id=:userId order by id"); 
Finder finder=Finder.getSelectFinder(User.class).append(" WHERE id=:userId order by id desc "); 
        finder.setParam("userId", "admin");
        User u = baseDemoService.queryForObject(finder, User.class);
        System.out.println(u.getName());

}
//@Test 查询分页
public void testMsSql() throws Exception{
        //Finder finder=new Finder("select * from t_user order by id");
        Finder finder=Finder.getSelectFinder(User.class).append(" order by id desc ");
        Listlist = baseDemoService.queryForList(finder, User.class, new Page(2));
        System.out.println(list.size());
        for(User s:list){
         System.out.println(s.getName());
         }
}



//@Test 调用数据库存储过程
public void testProc() throws Exception{
        Finder finder=new Finder();
        finder.setParam("unitId", 0);
        finder.setProcName("proc_up");
        Map queryObjectByProc = (Map) baseDemoService.queryObjectByProc(finder);
        System.out.println(queryObjectByProc.get("#update-count-10"));
        

}

//@Test 调用数据库函数
public void testFunction() throws Exception{
        Finder finder=new Finder();
        finder.setFunName("fun_userId");
        finder.setParam("userId", "admin");
        String userName= baseDemoService.queryForObjectByByFunction(finder,String.class);
        System.out.println(userName);
}

springrain云原生微服务实现下载地址 已被下载479次
本资源由用户投稿上传,内容来自互联网,本站只做免费推荐用于学习分享,如有版权及其他问题,请联系 本站编辑 处理
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
下载排行