Score
0
Watch 21 Star 79 Fork 14

码农架构 / M-PassJavaApache-2.0

Join us
Explore and code with more than 2 million developers,Free private repositories !:)
Sign up
基于SpringBoot2.x、SpringCloud并采用前后端分离的企业级微服务,多租户系统架构微服务开发平台 mPaaS(Microservice PaaS)为租户业务开发、测试、运营及运维开源框架,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的微服务应用;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分... spread retract

Clone or download
PLG authored 应用信息
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Downloads Downloads star

mPass (Microservice Pass)

基于SpringBoot2.x、SpringCloud并采用前后端分离的企业级微服务,多租户系统架构微服务开发平台 mPaaS(Microservice PaaS)为租户业务开发、测试、运营及运维开源框架,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的微服务应用;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等

[TOC]

______  ___     ________                      
___   |/  /     ___  __ \_____ _______________
__  /|_/ /________  /_/ /  __ `/_  ___/_  ___/
_  /  / /_/_____/  ____// /_/ /_(__  )_(__  )
/_/  /_/        /_/     \__,_/ /____/ /____/  

作者:iByte (码哥 or 李尚志)

如果您觉得有帮助,请点右上角 "Star" 支持一下谢谢

项目总体架构图

项目架构图

核心JAR架构依赖视图

输入图片说明

:anger: :facepunch: 系统处于开发阶段, 预计两个月时间完成整体架构体系

核心功能

  • 快速开发:工程化的开发框架可以自动生成初始化代码,框架还提供模块化开发模式,适用于多人协作开发。
  • 性能优化:支持运营活动投放一站式全流程创建管理,加载智能化投放能力,最大可能提升运营效率和转化效果,助力业务增长。
  • 数字化运营闭环:所有组件都经历了高并发,大流量的检验,对弱网,保活,容器等都有深度的优化,能够兼容复杂的客户端情况
  • 使用方式灵活:框架与组件并没有强依赖,可分可合,灵活机动。各组件可以独立的提供强大的功能,也可以互相配合优化使用体验,发挥更大的作用

maven 主要核心包版本依赖

  • 目前架构支持 H2database | MySQL | Oracle | Sqlserver 四种数据库的切换,用户可自由选择安装数据库
依赖包 说明
JDK 1.8
Spring-Cloud Greenwich.SR2
Spring-Boot 2.1.6.RELEASE
Spring-Boot-admmin 2.1.6
druid 1.1.10
netty-all RELEASE
h2database 1.4.197
mysql 5.1.46
oracle 12.1.0.1.0
sqlserver 6.0.8112.200
arangodb 4.2.2
elasticsearch 6.1
jedis 2.9.0
logstash 6.1
guava 20.0
reflections 0.9.11
swagger2 2.9.2
lombok 1.18.8

查看更新记录请移步 目前进度

  • common
    • common-base
    • common-api
    • common-core
  • framework-discovery
    • framework-discovery-api
    • framework-discovery-client
    • framework-discovery-core
    • framework-plugin-api
    • framework-plugin-client
    • framework-plugin-core
  • framework-gateway
    • framework-gateway-api
    • framework-gateway-core
  • sys-job
    • sys-job-api
    • sys-job-client
    • sys-job-core

1.1 开发细节

1.1 SPI拓展

SpringBoot SPI拓展

  • 支持自定义Banner拓展
  • 支持设置默认config配置文件加载
  • 支持实现logback拓展
  • 支持实现redis拓展
  • 支持实现spring基础拓展
org.springframework.boot.SpringApplicationRunListener=\
  com.ibyte.component.config.DefaultConfigListener,com.ibyte.component.logback.LogbackListener,com.ibyte.component.banner.BannerListener
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.ibyte.component.spring.PackageScanAutoConfig,com.ibyte.component.redis.RedissonAutoConfiguration
com.ibyte.component.config.DefaultConfigFactory=\
  com.ibyte.component.config.InitPropConfigFactory

1.2 IDGenerator

ID生成器

/**
 * 生成主键,36位,[0-9a-w]:时间+w+jvmId+w+流水号+w+随机数填充+w+tenantId
 */
public static String generateID() {
    return generateID(System.currentTimeMillis(), TenantUtil.getTenantId());
}
/**
 * 根据指定时间生成主键
 */
public static String generateID(long time) {
    return generateID(time, TenantUtil.getTenantId());
}

/**
 * 根据指定时间,租户生成主键
 */
public static String generateID(long time, int tenant) {
    StringBuilder id = new StringBuilder(LEN);
    id.append(Long.toUnsignedString(time, 32)).append(SPLIT)
            .append(Long.toUnsignedString(jvmId, 32)).append(SPLIT);
    String tenantId = Integer.toUnsignedString(tenant, 32);
    // 除去租户ID长度
    int length = LEN - tenantId.length() - 1;
    // 序列号填充,若填充完超过指定长度,则取后半部分
    String seqNum = Long.toUnsignedString(SEQ.incrementAndGet(), 32);
    if (id.length() + seqNum.length() > length) {
        seqNum = seqNum.substring(id.length() + seqNum.length() - length,
                seqNum.length());
    }
    id.append(seqNum).append(SPLIT);
    // 随机数填充,不超过leng长度
    while (id.length() < length) {
        id.append(Integer.toUnsignedString(RANDOM.nextInt(), 32));
    }
    id.delete(length, id.length());
    return id.append(SPLIT).append(tenantId).toString();
}

1.3 异常国际化处理

RuntimeException 拓展类处理

public KmssRuntimeException(String messageKey) {
		super(ResourceUtil.getString(messageKey));
		this.code = messageKey;
}

1.4 本地扩展点

/**
 * 本地扩展点的声明采用注解的方式声明,并在注解上使用LocalExtensionPoint的注解<br>
 *
 * <li>若定义了manager类,插件工厂在初始化时会自动往manager中注入Provider的信息,configurable强制为false。</li>
 * <li>若定义了config类,则Plugin.getProvider的class参数为config,返回值为config类的实例。</li>
 * <li>若未定义了config类,但定义了baseOn,则Plugin.getProvider的class参数为baseOn,返回值为注解所在类的实例(优先Spring的Bean)。</li>
 * <li>未定义config,未定义baseOn,则扩展点无效</li>
 *
 * @author li.Shangzhi
 * @Date: 2019-10-17
 */
@Target({ ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface LocalExtensionPoint {
   //...
}

1.5 系统内置配置

@EnableConfigurationProperties 与 @ConfigurationProperties 处理

@Configuration
@EnableConfigurationProperties({SystemConfig.class, TenantConfig.class, LicenseConfig.class, LanguageConfig.class, CorsConfig.class})
// 多语言配置信息
@ConfigurationProperties("kmss.lang")
public class LanguageConfig {
    //...
}

// 系统配置
@ConfigurationProperties("kmss.system")
public class SystemConfig {
    //...
}

交流群

 
QQ交流群:877056205 mPaaS 微信交流群:iByte_Li(备注拉群要求) 微信公众号:码农架构
Java
1
https://gitee.com/ibyte/M-Pass.git
git@gitee.com:ibyte/M-Pass.git
ibyte
M-Pass
M-Pass
master

Help Search