架构设计详细思路:https://www.jiagou.com/post/58-cloud-native-service-mesh
限制接口和实现的命名强制规范.一个RPC接口只能有一个实现.分布式事务,一定要避免A服务update表t,RPC调用B服务,B服务也update表t.这样A等待B结果,B等待A释放锁,造成死锁.分布式无注解比较方便,理论上有不同步风险,个人感觉做好日志,风险不大Service层不可以使用ServletAPI,例如HttpRequest建议每个前后端module/子项目,都有各自的前缀,方便nginx根据路径解析如果module依赖包的特定版本(例如netty,Grpc)和根项目版本冲突,module不能无感知集成,暂时只能独立运行体验单体到分层切换修改springrain-system-web依赖springrain-system-service,不再依赖springrain-system-serviceimpl. springrain-system-serviceimpl添加springrain-grpc-server依赖,启用org.springrain.SystemServiceImplApplication的@SpringBootApplication注解启动seata-server服务端.seata客户端的配置在项目的resources/file.conf里,默认配置是default.grouplist="127.0.0.1:8091"启动springrain-system-serviceimpl启动springrain-system-web访问https://127.0.0.1:8080/system/api/checkHealth文档https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/doc
代码生成器https://gitee.com/chunanyong/springrain/tree/master/springrain-gencode
sql脚本https://gitee.com/chunanyong/springrain/tree/master/springrain-system/springrain-system-web/sql
测试用例//就极简而言,一个数据库只需要一个Service,就可以管理这个数据库的任意一张表//@Test查询基本类型publicvoidtestObject()throwsException{//Finderfinder=newFinder("selectidfromt_userwhere1=1");Finderfinder=Finder.getSelectFinder(User.class,"id").append("WHERE1=1");finder.append("andid=:userId").setParam("userId","admin");Stringid=baseDemoService.queryForObject(finder,String.class);System.out.println(id);}//@Test查询一个对象publicvoidtestObjectUser()throwsException{//Finderfinder=newFinder("select*fromt_userwhereid=:userIdorderbyid");Finderfinder=Finder.getSelectFinder(User.class).append("WHERE id=:userIdorderbyiddesc");finder.setParam("userId","admin");Useru=baseDemoService.queryForObject(finder,User.class);System.out.println(u.getName());}//@Test查询分页publicvoidtestMsSql()throwsException{//Finderfinder=newFinder("select*fromt_userorderbyid");Finderfinder=Finder.getSelectFinder(User.class).append("orderbyiddesc");Listlist=baseDemoService.queryForList(finder,User.class,newPage(2));System.out.println(list.size());for(Users:list){System.out.println(s.getName());}}//@Test调用数据库存储过程publicvoidtestProc()throwsException{Finderfinder=newFinder();finder.setParam("unitId",0);finder.setProcName("proc_up");MapqueryObjectByProc=(Map)baseDemoService.queryObjectByProc(finder);System.out.println(queryObjectByProc.get("#update-count-10"));}//@Test调用数据库函数publicvoidtestFunction()throwsException{Finderfinder=newFinder();finder.setFunName("fun_userId");finder.setParam("userId","admin");StringuserName=baseDemoService.queryForObjectByByFunction(finder,String.class);System.out.println(userName);}
评论