All Projects → smart-cloud → smart-cloud-examples

smart-cloud / smart-cloud-examples

Licence: Apache-2.0 License
基于springcloud的脚手架(smart-cloud)示例,支持服务合并部署与拆分部署、接口加解密签名、日志数据脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务等

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to smart-cloud-examples

smart-cloud
基于springboot && springcloud的脚手架,支持服务合并部署与拆分部署、接口加解密签名、日志数据 脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务、国际化语言等
Stars: ✭ 167 (+626.09%)
Mutual labels:  rabbitmq, springcloud, integration-test, openfeign, dynamic-datasource
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+34134.78%)
Mutual labels:  rabbitmq, springboot, springcloud
Fw Cloud Framework
基于springcloud全家桶开发分布式框架(支持oauth2认证授权、SSO登录、统一下单、微信公众号服务、Shardingdbc分库分表、常见服务监控、链路监控、异步日志、redis缓存等功能),实现基于Vue全家桶等前后端分离项目工程
Stars: ✭ 717 (+3017.39%)
Mutual labels:  rabbitmq, springboot, springcloud
robert
基于SpringCloud的企业级微服务多租户系统、多语言的脚手架, 代码组件化、高内聚低耦合,代码简介,注释丰富容易上手,该项目包括用于开发分布式应用程序服务的必要组件,支持多应用程序访问,并使开发人员可以轻松地使用Spring Cloud编程模型来开发分布式应用程序服务。
Stars: ✭ 45 (+95.65%)
Mutual labels:  rabbitmq, springboot, springcloud
Javacollection
Java开源项目之「自学编程之路」:学习指南+面试指南+资源分享+技术文章
Stars: ✭ 2,957 (+12756.52%)
Mutual labels:  rabbitmq, springboot, springcloud
Spring Boot Examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
Stars: ✭ 26,812 (+116473.91%)
Mutual labels:  rabbitmq, springboot, springcloud
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+44404.35%)
Mutual labels:  rabbitmq, springboot, springcloud
Pdf
编程电子书,电子书,编程书籍,包括C,C#,Docker,Elasticsearch,Git,Hadoop,HeadFirst,Java,Javascript,jvm,Kafka,Linux,Maven,MongoDB,MyBatis,MySQL,Netty,Nginx,Python,RabbitMQ,Redis,Scala,Solr,Spark,Spring,SpringBoot,SpringCloud,TCPIP,Tomcat,Zookeeper,人工智能,大数据类,并发编程,数据库类,数据挖掘,新面试题,架构设计,算法系列,计算机类,设计模式,软件测试,重构优化,等更多分类
Stars: ✭ 12,009 (+52113.04%)
Mutual labels:  rabbitmq, springboot, springcloud
Supermarket
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器上,不断完善中……
Stars: ✭ 1,278 (+5456.52%)
Mutual labels:  rabbitmq, springboot, springcloud
Java-CS-Record
记录准备春招实习过程中,学习与复习的知识(模块化整理,非面试题速成)。注:暂停更新,后续请移步博客
Stars: ✭ 73 (+217.39%)
Mutual labels:  rabbitmq, springboot, springcloud
vm-engine
vm-engine为“微视频”网站的后端,java语言开发。涉及技术包括,springboot,springcloud,mybaties,docker,websocket,rabbitmq,redis等。
Stars: ✭ 57 (+147.83%)
Mutual labels:  rabbitmq, springboot, springcloud
Goodskill
🐂基于springcloud +dubbo构建的模拟秒杀项目,模块化设计,集成了分库分表、elasticsearch🔍、gateway、mybatis-plus、spring-session等常用开源组件
Stars: ✭ 786 (+3317.39%)
Mutual labels:  rabbitmq, springboot, springcloud
Myth
Reliable messages resolve distributed transactions
Stars: ✭ 1,470 (+6291.3%)
Mutual labels:  rabbitmq, springboot, springcloud
Leyou
传智黑马乐优商城项目后台管理系统
Stars: ✭ 75 (+226.09%)
Mutual labels:  rabbitmq, springboot, springcloud
Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+238147.83%)
Mutual labels:  rabbitmq, springboot, springcloud
seckill parent
基于springboot+springcloud的高并发和商品秒杀项目,通过redis,rabbitmq等技术实现秒杀的高并发。
Stars: ✭ 59 (+156.52%)
Mutual labels:  rabbitmq, springboot, springcloud
Seckill
基于Spring Boot的高性能秒杀系统
Stars: ✭ 171 (+643.48%)
Mutual labels:  rabbitmq, springboot
skycloud-base
🔥springcloud脚手架,配置中心(apollo/nacos) 注册中心(consul/nacos) 分布式事物(seata) 调用链(skywalking) 日志(ELK)监控(prometheus与grafana) 等,适合学习与快速开发使用
Stars: ✭ 80 (+247.83%)
Mutual labels:  springboot, springcloud
micro-service-practice
OpenStack+Docker+RestAPI+OAuth/HMAC+RabbitMQ/ZMQ+OpenResty/HAProxy/Nginx/APIGateway+Bootstrap/AngularJS+Ansible+K8S/Mesos/Marathon构建/探索微服务最佳实践。
Stars: ✭ 25 (+8.7%)
Mutual labels:  rabbitmq, springcloud
Springbootlearning
《Spring Boot教程》源码
Stars: ✭ 2,065 (+8878.26%)
Mutual labels:  rabbitmq, springcloud

一、项目说明

此项目为基于smart-cloud的微服务示例项目。 自动化构建见ci

(一)服务说明

smart-cloud-examples
├── smart-cloud-example-framework -- 框架进一步封装
├── system-test -- 系统测试
├── merge-module -- 服务合并模块
|    ├── merge-basic -- 基础服务合并项目[端口:30001]
|    └── merge-mall -- 商城服务合并项目[端口:30002]
└── application-module -- 应用服务模块
     ├── api-ac-core -- api meta信息上传gateway处理
     ├── app-auth-core -- 用户上下文信息处理
     ├── app-common-config -- 公共配置
     ├── basic-module -- 基础服务模块(如文件服务、权限服务、登陆服务等)
     |    ├── basic-service-user -- 用户服务[端口:20031]
     |    └── basic-service-auth -- 权限服务[端口:20041]
     ├── mall-module -- 商城服务模块
     |    ├── mall-service-order -- 订单服务[端口:20011]
     |    └── mall-service-product -- 商品服务[端口:20021]
     ├── rpc-module -- rpc调用模块
     |    ├── basic-service-rpc -- 基础服务rpc模块
     |    ├── mall-service-rpc -- 商城服务rpc模块
     |    └── support-service-rpc -- 支撑服务rpc模块
     └── support-module -- 支撑服务模块
          ├── support-service-admin -- 注册中心[端口:10001]
          └── support-service-gateway -- 网关[端口:80]

(二)工程模块图

二、接口安全

(一)流程

1、通过自定义注解,监听服务启动完毕后,通知gateway,gateway根据服务名去注册中心获取服务的ip、port,然后通过http主动去掉服务的接口获取api meta信息(是否签名、是否加密、是否需要鉴权等),存至redis。

注意:次处为了接口安全考虑,没有直接将api meta信息由服务主动上报给gateway。

2、后台管理系统在配置权限时,会通过rpc接口刷新网关服务存储的权限信息。

3、用户登陆成功后,会将所拥有的权限信息通过rpc上传给网关。

4、用户访问接口通过网关时,会与缓存在redis里的信息做加解密、鉴权等处理。

(二)接口数据加解密、签名流程

1、约定

接口mapping url格式:服务模块名/接口使用端标志/接口模块名/接口名
如:user/api/loginInfo/login

接口使用端标记:
	api:app端使用的接口
	oms:管理后台使用的接口
	rpc:rpc接口
	
http get、http post共同部分,即http headers部分的数据,它包含请求时间戳(默认2分钟内有效)、请求的token、交易流水号、签名等4个自定义字段:
	smart-sign: 109ad1a8e05f8de345e6d780f09b001e97dc3d6fa9bbbe6936edb2b75a81864ac3b0b071e093af001fbffa479217540138b98f6f165e8246dd25a2536649f1f6
	smart-timestamp: 1555778393862
	smart-token: 4c2e22605001000rK
	smart-nonce: eb9f81e7cee1c000

2、Http GET

请求数据由http headers、url查询字符串组成,url查询字符串为实际请求的参数。 如http://localhost:10010/user/api/loginInfo/queryById?id=100

3、Http POST

请求数据采用json格式,通过流的形式传输。 请求数据由http headers、http body两部分组成,http body部分为请求的实际参数(json格式)。

1.请求数据组成

http body部分

{
    "products": [{
        "buyCount": 1,
        "productId": 4
	}]
}

2.响应对象Resp组成

{
	"head": {
		"transactionId": null,
		"code": "100200",
		"msg": "成功",
		"timestamp": 0
	},
	"body": {
		"id": "2",
		"name": "手机",
		"price": "1200"
	},
	"sign": "109ad1a8e05f8de345e6d780f09b001e97dc3d6fa9bbbe6936edb2b75a81864ac3b0b071e093af001fbffa479217540138b98f6f165e8246dd25a2536649f1f6"
}

4、加密、签名

1.签名、加密的key传递

2.请求方

(1)请求参数
Http Get请求方式 :
1.url查询字符串中的参数以json的格式组装得到查询的json串;
2.sign = RSA签名(“httpmethod + http headers(按自然排序的json串) + url查询json串”组成)

Http Post请求方式 :
1.将http body部分的数据json化;
2.AES加密body的json串;
3.sign = RSA签名(“httpmethod + http headers(按自然排序的json串) + AES加密body的json串”)
(2)返回结果

Http Get、Http Post方式响应信息加密、签名相同。

1.校验签名是否正确;
2.解密数据
head = AES解密(head的json串)
body = AES解密(body json串)

3.响应方

(1)请求入参
Http Get请求方式 :
校验签名是否正确
sign = RSA签名校验(“httpmethod + http headers(按自然排序的json串) + url查询的json串”组成,sign, 公钥)

Http Post请求方式 :
1.校验签名是否正确
  sign = RSA签名校验(“httpmethod + http headers(按自然排序的json串) + AES加密body的json串”, 公钥)
2.AES解密body的json串;
(2)响应结果

Http Get、Http Post请求方式响应信息加密、签名相同。

head = AES加密(head的json串)
body = AES加密(body json串)
sign = RSA签名签名(AES加密(head的json串) + AES加密(body json串))

三、环境搭建

  • 更改hosts文件,添加如下内容(注册中心eureka会使用到)
  127.0.0.1       nodeA
  • 安装redis,并启动
  • 安装mysql,执行/docs/sql下脚本
  • 安装rabbitmq,并启动
  • 安装nacos,并启动
  • 安装seata服务端,并启动
    • server sql见/smart-cloud-examples/docs/sql/seata.sql
    • file.conf文件配置
      service {
        #vgroup->rgroup
        vgroupMapping.smartcloud_tx_group = "smartcloud"
        #only support single node
        smartcloud.grouplist = "127.0.0.1:8091"
        #degrade current not support
        enableDegrade = false
        #disable
        disable = false
        #unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default permanent
        max.commit.retry.timeout = "-1"
        max.rollback.retry.timeout = "-1"
      }
      
      store {
        ## store mode: file、db
        mode = "db"
        ## database store property
        db {
          ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
          datasource = "druid"
          ## mysql/oracle/postgresql/h2/oceanbase etc.
          dbType = "mysql"
          driverClassName = "com.mysql.jdbc.Driver"
          url = "jdbc:mysql://127.0.0.1:3306/seata"
          user = "collin"
          password = "123456"
          minConn = 5
          maxConn = 30
          globalTable = "global_table"
          branchTable = "branch_table"
          lockTable = "lock_table"
          queryLimit = 100
          maxWait = 5000
        }
      }
    
  • smart-cloud相关jar install到本地仓库
    • clone下smart-cloud
    • 进入smart-cloud目录,执行mvn clean install -DskipDocker -Dmaven.test.skip=true -T 4
  • 服务启动顺序
    • 启动redis
    • 启动mysql
    • 启动rabbitmq
    • 启动seata
    • 启动nacos
    • 启动support-service-gateway
    • 最后依次启动mall下或basic下服务

四、注意事项

  • 针对jasypt加密,所有的需要合并的单体服务的jasypt.encryptor.password的值必须相同,否则会报错。

  • 服务构建

单体服务构建:clean install
合体服务构建:clean install -P merge

五、错误码

所属模块 code message
basic-service-user 100001 账号不存在
basic-service-user 100002 用户被禁用
basic-service-user 100003 用户已被删除
basic-service-user 100004 用户名或密码错误
basic-service-user 100005 该手机号已存在,请换一个重新注册
basic-service-user 100006 该用户名已存在,请换一个重新注册
basic-service-auth 110001 权限编码已存在
basic-service-auth 110002 角色编码已存在
mall-service-order 200001 库存更新失败
mall-service-order 200002 商品不存在
mall-service-product 300001 库存不足,操作失败
support-service-gateway 400001 获取api meta失败
support-service-gateway 400002 rsa密钥对生成出错
support-service-gateway 400003 登录前token失效
support-service-gateway 400004 登录成功后token失效
support-service-gateway 400005 请求参数中token缺失
support-service-gateway 400006 请求签名缺失
support-service-gateway 400007 请求参数签名校验失败
support-service-gateway 400008 当前用户暂未登陆,获取userId失败
support-service-gateway 400009 未获取到登陆缓存信息
support-service-gateway 400010 请求时间戳不能为空
support-service-gateway 400011 请求时间戳格式错误
support-service-gateway 400012 请求时间戳非法
support-service-gateway 400013 security key过期
support-service-gateway 400014 AES key获取失败

FAQ

spring cloud gateway集成openfeign启动时卡死

openfeign不支持 reactive clients。解决方案:1.延迟(@Lazy)加载feign客户端;2.通过ObjectProvider<openfeign客户端>的方式获取feign的bean(参考:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#reactive-support).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].