跳至主要內容

微服务版和单体版区别

大约 3 分钟快速了解快速了解微服务版和单体版区别

lamp-boot 基于SpringBoot进行开发,lamp-cloud 基于SpringCloud。2者功能完全上一样,功能代码基本一致,仅有几个差别

  1. lamp-boot 没有网关,网关即lamp-gateway-server,在lamp-cloud网关的几个过滤器在lamp-boot中采用拦截器实现相同的功能。即AuthenticationFilter、TokenContextFilter 实现方式不一样,但实现效果一致。

  2. lamp-boot只有一个lamp-boot-server模块,用于存放配置文件、启动类、配置类等。而lamp-cloud每个服务都有一个server模块,存放各个服务自己的配置文件和启动类。

  3. 暴露给前端的接口有区别,由于lamp-cloud项目有网关,所以暴露给前端的接口多了前缀/api/base 或者 /api/system,为了使同一套前端项目无缝适配2套后端项目,所以前端代码的请求地址全部使用了lamp-cloud项目暴露出来的地址, 在使用lamp-boot时, 需要在前端代理或者nginx中增加uri的代理重写地址。

    用户分页查询接口:

    • lamp-boot: POST /user/page

    • lamp-cloud: POST /api/base/user/page

    消息分页查询接口:

    • lamp-boot: POST /msg/page

    • lamp-cloud: POST /api/base/msg/page

  4. EchoApi 类中所有的feign改成Impl

    public interface EchoApi {
        // @lamp.generator auto insert EchoApi
    
        /**
         * lamp-cloud 数据字典项 feign查询类 全类名
         */
        String DICTIONARY_ITEM_FEIGN_CLASS = "top.tangyh.lamp.common.api.DictApi";
    }
    
  5. lamp-boot-server模块 application.yml = lamp-cloud的 nacos 中所有配置合并

  6. lamp-boot-server = lamp-system-server + lamp-oauth-server + lamp-base-server + lamp-generator-server合并

  7. uri权限校验时,判断的uri地址不同: ResourceBiz#checkUri

    /**
     * 检查指定接口是否有访问权限
     *
     * @param path   请求路径
     * @param method 请求方法
     * @return 是否有权限
     */
    public Boolean checkUri(String path, String method) {
    	// 中间代码省略...
      return apiList.parallelStream().distinct().anyMatch(item -> {
          String uri = item.getUri();
          boolean matchUri = PATH_MATCHER.match(StrUtil.trim(uri), StrUtil.trim(path));
    
          log.info("path={}, uri={}, matchUri={}, method={} apiId={}", path, uri, matchUri, item.getRequestMethod(), item.getId());
          if (HttpMethod.ALL.name().equalsIgnoreCase(item.getRequestMethod())) {
              return matchUri;
          }
          return matchUri && StrUtil.equalsIgnoreCase(method, item.getRequestMethod());
      });
    }
    
  8. 新建租户时,初始化lamp_base库表结构的脚本存放路径不同。boot位于 lamp-boot-server/src/main/resources/ ,cloud位于 lamp-system-server/src/main/resources/

    仅DATASOURCE模式项目有脚本,COLUMN和NONE模式没有脚本。

  9. 租户管理初始化数据源实现不同: GeneratorController

    // lamp-cloud 项目GeneratorController位于lamp-gateway-server
        @ResponseBody
        @ApiOperation(value = "查询在线服务的前缀")
        @GetMapping("/gateway/findOnlineServicePrefix")
        public R<Map<String, String>> findOnlineServicePrefix() {
            List<String> services = discoveryClient.getServices();
    
            Map<String, String> map = MapUtil.newHashMap();
            services.forEach(service ->
                    gatewayProperties.getRoutes().forEach(route -> {
                        if (StrUtil.equalsIgnoreCase(service, route.getUri().getHost())) {
                            if (CollUtil.isEmpty(route.getPredicates())) {
                                return;
                            }
                            PredicateDefinition predicateDefinition = route.getPredicates().get(0);
                            predicateDefinition.getArgs().forEach((k, v) -> {
                                map.put(service, StrUtil.subBetween(v, "/", "/**"));
                            });
                        }
                    })
            );
            return R.success(map);
        }
    
  10. 代码生成器生成代码需要的模板文件存放位置不同

  11. CaptchaServiceImpl 中 使用 MsgApi 换成 MsgBiz

👆🏻👆🏻👆🏻上面是评论区,对系统、本页文档什么疑问,可以在评论区留言。
❗️❗️❗️若评论区无法显示,请使用"手机热点"或"科学上网"。